blob: 7c63c16aaca552e7c45b394a39dc7f3cbff99c83 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2016 Aston University.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* This Source Code may also be made available under the following Secondary
* Licenses when the conditions for such availability set forth in the Eclipse
* Public License, v. 2.0 are satisfied: GNU General Public License, version 3.
*
* SPDX-License-Identifier: EPL-2.0 OR GPL-3.0
*
* Contributors:
* Antonio Garcia-Dominguez - initial API and implementation
******************************************************************************/
package org.eclipse.hawk.epsilon.emc;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.epsilon.eol.IEolModule;
import org.eclipse.epsilon.epl.EplModule;
import org.eclipse.epsilon.epl.execute.PatternMatch;
import org.eclipse.epsilon.epl.execute.model.PatternMatchModel;
import org.eclipse.hawk.core.IModelIndexer;
import org.eclipse.hawk.core.graph.IGraphNode;
import org.eclipse.hawk.core.query.QueryExecutionException;
import org.eclipse.hawk.epsilon.emc.tracking.AccessListener;
/**
* Adds support for EPL queries to Hawk. Derived attributes are not supported.
*/
public class EPLQueryEngine extends EOLQueryEngine {
public static final String TYPE = "org.eclipse.hawk.epsilon.emc.EPLQueryEngine";
public static final String RULENAME_KEY = "_rulename";
@Override
public AccessListener calculateDerivedAttributes(IModelIndexer m, Iterable<IGraphNode> nodes) {
throw new UnsupportedOperationException();
}
@Override
public String getType() {
return TYPE;
}
@Override
protected IEolModule createModule() {
return new EplModule();
}
@Override
protected Object runQuery(IEolModule module) throws QueryExecutionException {
final Object ret = super.runQuery(module);
if (ret instanceof PatternMatchModel) {
final PatternMatchModel matchModel = (PatternMatchModel) ret;
final List<Map<String, Object>> results = new ArrayList<>(matchModel.getMatches().size());
for (PatternMatch match : matchModel.getMatches()) {
final Map<String, Object> result = new HashMap<>(match.getRoleBindings());
result.put(RULENAME_KEY, match.getPattern().getName());
results.add(result);
}
return results;
} else {
return ret;
}
}
@Override
public String getHumanReadableName() {
return "EPL Query Engine";
}
}