Loading plugins/org.etsi.mts.tdl.helper/META-INF/MANIFEST.MF +2 −1 Original line number Diff line number Diff line Loading @@ -20,5 +20,6 @@ Require-Bundle: org.eclipse.xtext, org.eclipse.emf.ecore, org.eclipse.core.runtime, org.eclipse.emf.mwe.utils, org.eclipse.ocl.xtext.completeocl org.eclipse.ocl.xtext.completeocl, org.eclipse.core.resources Export-Package: org.etsi.mts.tdl.helper plugins/org.etsi.mts.tdl.helper/src/org/etsi/mts/tdl/helper/TDLHelper.java +90 −0 Original line number Diff line number Diff line Loading @@ -3,11 +3,20 @@ package org.etsi.mts.tdl.helper; import java.io.IOException; import java.net.URISyntaxException; import java.util.Collections; import java.util.HashSet; import java.util.Set; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceVisitor; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Platform; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EOperation; Loading @@ -27,6 +36,7 @@ import org.eclipse.xtext.IGrammarAccess; import org.eclipse.xtext.resource.IResourceServiceProvider; import org.eclipse.xtext.resource.XtextResourceSet; import org.eclipse.xtext.serializer.impl.Serializer; import org.etsi.mts.tdl.Package; import org.etsi.mts.tdl.TDLan2StandaloneSetup; import org.etsi.mts.tdl.TDLtxStandaloneSetup; import org.etsi.mts.tdl.TDLtxiStandaloneSetup; Loading Loading @@ -179,6 +189,86 @@ public class TDLHelper { return Collections.EMPTY_SET; } private static final String TDL_MODEL_NAME = "tdl"; private static final String HTTP_MODEL_NAME = "http"; private static final String[] MODEL_FILE_EXTENSIONS = new String[] { "tdl", "tdlan2", "tdltx", "tdltxi" }; private static IProject getProjectForResource(Resource resource) { IWorkspaceRoot ws = org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRoot(); URI resourceUri = resource.getURI(); IFile modelFile = null; if (resourceUri.isPlatformResource()) { modelFile = ws.getFile(new Path(resourceUri.toPlatformString(true))); } else if (resourceUri.isFile()) { // TODO // String uriString = resourceUri.toFileString(); // java.net.URI uri = new java.net.URI(uriString); // IFile[] files = ws.findFilesForLocationURI(uri); } if (modelFile != null) return modelFile.getProject(); return null; } abstract static class FileFinder implements IResourceVisitor { public IFile file; @Override public boolean visit(IResource resource) throws CoreException { if (file != null) return false; if (resource.getType() != IResource.FILE) return true; if (mathces((IFile) resource)) { this.file = (IFile) resource; } return file == null; } abstract protected boolean mathces(IFile file); } public static Package getTdlPackage(Resource resource) { return getKnownPackage(resource, TDL_MODEL_NAME); } public static Package getHttpPackage(Resource resource) { return getKnownPackage(resource, HTTP_MODEL_NAME); } private static Package getKnownPackage(Resource resource, String packageName) { try { IProject prj = getProjectForResource(resource); if (prj != null) { final Set<String> names = new HashSet<>(); for (String ext : MODEL_FILE_EXTENSIONS) { names.add(packageName + "." + ext); } FileFinder finder = new FileFinder() { @Override protected boolean mathces(IFile file) { return names.contains(file.getName().toLowerCase()); } }; prj.accept(finder); if (finder.file != null) { URI uri = URI.createPlatformResourceURI(finder.file.getFullPath().toString(), true); Resource tdlResource = resource.getResourceSet().getResource(uri, true); return (Package) tdlResource.getContents().get(0); } } } catch (CoreException e) { // TODO Auto-generated catch block e.printStackTrace(); throw new RuntimeException(e); } return null; } /** * Reset the shared resourceSet. */ Loading Loading
plugins/org.etsi.mts.tdl.helper/META-INF/MANIFEST.MF +2 −1 Original line number Diff line number Diff line Loading @@ -20,5 +20,6 @@ Require-Bundle: org.eclipse.xtext, org.eclipse.emf.ecore, org.eclipse.core.runtime, org.eclipse.emf.mwe.utils, org.eclipse.ocl.xtext.completeocl org.eclipse.ocl.xtext.completeocl, org.eclipse.core.resources Export-Package: org.etsi.mts.tdl.helper
plugins/org.etsi.mts.tdl.helper/src/org/etsi/mts/tdl/helper/TDLHelper.java +90 −0 Original line number Diff line number Diff line Loading @@ -3,11 +3,20 @@ package org.etsi.mts.tdl.helper; import java.io.IOException; import java.net.URISyntaxException; import java.util.Collections; import java.util.HashSet; import java.util.Set; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceVisitor; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Platform; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EOperation; Loading @@ -27,6 +36,7 @@ import org.eclipse.xtext.IGrammarAccess; import org.eclipse.xtext.resource.IResourceServiceProvider; import org.eclipse.xtext.resource.XtextResourceSet; import org.eclipse.xtext.serializer.impl.Serializer; import org.etsi.mts.tdl.Package; import org.etsi.mts.tdl.TDLan2StandaloneSetup; import org.etsi.mts.tdl.TDLtxStandaloneSetup; import org.etsi.mts.tdl.TDLtxiStandaloneSetup; Loading Loading @@ -179,6 +189,86 @@ public class TDLHelper { return Collections.EMPTY_SET; } private static final String TDL_MODEL_NAME = "tdl"; private static final String HTTP_MODEL_NAME = "http"; private static final String[] MODEL_FILE_EXTENSIONS = new String[] { "tdl", "tdlan2", "tdltx", "tdltxi" }; private static IProject getProjectForResource(Resource resource) { IWorkspaceRoot ws = org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRoot(); URI resourceUri = resource.getURI(); IFile modelFile = null; if (resourceUri.isPlatformResource()) { modelFile = ws.getFile(new Path(resourceUri.toPlatformString(true))); } else if (resourceUri.isFile()) { // TODO // String uriString = resourceUri.toFileString(); // java.net.URI uri = new java.net.URI(uriString); // IFile[] files = ws.findFilesForLocationURI(uri); } if (modelFile != null) return modelFile.getProject(); return null; } abstract static class FileFinder implements IResourceVisitor { public IFile file; @Override public boolean visit(IResource resource) throws CoreException { if (file != null) return false; if (resource.getType() != IResource.FILE) return true; if (mathces((IFile) resource)) { this.file = (IFile) resource; } return file == null; } abstract protected boolean mathces(IFile file); } public static Package getTdlPackage(Resource resource) { return getKnownPackage(resource, TDL_MODEL_NAME); } public static Package getHttpPackage(Resource resource) { return getKnownPackage(resource, HTTP_MODEL_NAME); } private static Package getKnownPackage(Resource resource, String packageName) { try { IProject prj = getProjectForResource(resource); if (prj != null) { final Set<String> names = new HashSet<>(); for (String ext : MODEL_FILE_EXTENSIONS) { names.add(packageName + "." + ext); } FileFinder finder = new FileFinder() { @Override protected boolean mathces(IFile file) { return names.contains(file.getName().toLowerCase()); } }; prj.accept(finder); if (finder.file != null) { URI uri = URI.createPlatformResourceURI(finder.file.getFullPath().toString(), true); Resource tdlResource = resource.getResourceSet().getResource(uri, true); return (Package) tdlResource.getContents().get(0); } } } catch (CoreException e) { // TODO Auto-generated catch block e.printStackTrace(); throw new RuntimeException(e); } return null; } /** * Reset the shared resourceSet. */ Loading