| /* |
| * Copyright (c) 2009 Borland Software Corporation |
| * |
| * 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: |
| * Alexander Shatalin (Borland) - initial API and implementation |
| * Artem Tikhomirov (Borland) - added uri and uriFragment helpers |
| */ |
| package org.eclipse.gmf.internal.codegen.util; |
| |
| import java.util.ArrayList; |
| import java.util.Collection; |
| import java.util.Collections; |
| import java.util.List; |
| |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.emf.ecore.EStructuralFeature; |
| import org.eclipse.emf.ecore.EStructuralFeature.Setting; |
| import org.eclipse.emf.ecore.util.EcoreUtil.CrossReferencer; |
| import org.eclipse.m2m.qvt.oml.blackbox.java.Operation; |
| import org.eclipse.m2m.qvt.oml.blackbox.java.Operation.Kind; |
| import org.eclipse.ocl.util.CollectionUtil; |
| |
| public class EMFUtils { |
| |
| @Operation(contextual = false, kind = Kind.HELPER) |
| public static List<EObject> getReferencingObjects(EObject target) { |
| Collection<EStructuralFeature.Setting> settings = CrossReferencer.find(target.eResource().getContents()).get(target); |
| if (settings == null) { |
| return CollectionUtil.<EObject> createNewSequence(Collections.<EObject> emptyList()); |
| } |
| List<EObject> result = new ArrayList<EObject>(); |
| for (Setting setting : settings) { |
| result.add(setting.getEObject()); |
| } |
| return CollectionUtil.<EObject> createNewSequence(result); |
| } |
| |
| @Operation(contextual = true, kind = Kind.QUERY) |
| public String uriFragment(EObject target) { |
| if (target.eResource() == null) { |
| return String.valueOf(System.identityHashCode(target)); // anything will do, identityHashCode just for personal amusement. |
| } |
| return target.eResource().getURIFragment(target); |
| } |
| |
| @Operation(contextual = true, kind = Kind.QUERY) |
| public String uri(EObject target) { |
| String fragment = uriFragment(target); |
| if (target.eResource() == null) { |
| return fragment; |
| } |
| return target.eResource().getURI().appendFragment(fragment).toString(); |
| } |
| } |