/******************************************************************************* * Copyright (c) 2011 Guillaume Hillairet. * 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: * Guillaume Hillairet - initial API and implementation *******************************************************************************/ package com.emf4sw.rdf.transform.lib; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.m2m.atl.engine.emfvm.lib.AbstractStackFrame; import org.eclipse.m2m.atl.engine.emfvm.lib.ExecEnv; import org.eclipse.m2m.atl.engine.emfvm.lib.LibExtension; import org.eclipse.m2m.atl.engine.emfvm.lib.Operation; import com.emf4sw.rdf.operations.DatatypeConverter; /** * * * @author <a href="mailto:g.hillairet at gmail.com">Guillaume Hillairet</a> * @since 0.5.5 */ public class ETripleLibExtension implements LibExtension { @Override public void apply(ExecEnv execEnv, Map<String, Object> options) { Operation convertToOperation = new Operation(2, "convertTo") { @Override public Object exec(AbstractStackFrame frame) { Object[] localVars = frame.getLocalVars(); if (localVars[1] instanceof String) { String var1 = (String) localVars[1]; if (localVars[0] instanceof String) { String var2 = (String) localVars[0]; Object ret = DatatypeConverter.convert(var1, var2); if (ret == null) { return DatatypeConverter.convert(var1, ""); } return ret; } } return null; } }; execEnv.registerOperation(Object.class, convertToOperation); Operation asStringOperation = new Operation(2, "asString") { @Override public Object exec(AbstractStackFrame frame) { Object[] localVars = frame.getLocalVars(); Object object = localVars[0]; if (localVars[1] instanceof String) { return DatatypeConverter.toString((String) localVars[1], object); } return localVars[1].toString(); } }; execEnv.registerOperation(Object.class, asStringOperation); Operation getEcoreIdOperation = new Operation(1, "getEcoreId") { @Override public String exec(AbstractStackFrame frame) { Object[] localVars = frame.getLocalVars(); if (localVars[0] instanceof EObject) { // URI generatedId = null;//EcoreUtil.getURI((EObject) localVars[0]); // if (generatedId == null) { // String ns = ((EObject) localVars[0]).eClass().getEPackage().getNsURI(); // ns = ns.endsWith("/") ? ns : ns+"/"; return EcoreUtil.generateUUID(); // } // String cut = generatedId.toString().substring(generatedId.toString().indexOf("#"), generatedId.toString().length() - 1); // if (cut.startsWith("#//")) // cut = cut.substring(3); // return cut; } throw new IllegalArgumentException("Cannot get URI from " + localVars[0]); } }; execEnv.registerOperation(Object.class, getEcoreIdOperation); Operation split_annotation = new Operation(1, "split_annotation") { @Override public List<String> exec(AbstractStackFrame frame) { Object[] localVars = frame.getLocalVars(); if (localVars[0] instanceof String) { return split_annotation((String) localVars[0]); } throw new IllegalArgumentException("Cannot get URI from " + localVars[0]); } private List<String> split_annotation(String object) { List<String> list = new ArrayList<String>(); boolean in = false; String tmp = ""; for (int i=0; i < object.length(); i++) { char c = object.charAt(i); if (c == ','&& !in) { list.add(tmp); tmp = ""; } else if (c == '(') { tmp = tmp + c; in = true; } else if (c == ')') { tmp = tmp + c; in = false; } else { tmp = tmp + c; } } list.add(tmp); return list; } }; execEnv.registerOperation(Object.class, split_annotation); } }