/******************************************************************************* * Copyright (c) 2013 AKSW Xturtle Project, itemis AG (http://www.itemis.eu). * 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 ******************************************************************************/ package de.itemis.tooling.xturtle.ui.validation; import java.util.List; import java.util.Set; import javax.inject.Inject; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.xtext.naming.QualifiedName; import org.eclipse.xtext.resource.IEObjectDescription; import org.eclipse.xtext.resource.IResourceDescriptions; import org.eclipse.xtext.resource.impl.ResourceDescriptionsProvider; import org.eclipse.xtext.validation.Check; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import de.itemis.tooling.xturtle.validation.XturtleJavaValidator; import de.itemis.tooling.xturtle.xturtle.PrefixId; import de.itemis.tooling.xturtle.xturtle.XturtlePackage; public class XturtleUIJavaValidator extends XturtleJavaValidator { public static final String IMPORT_PROJECT="importProject"; @Inject private ResourceDescriptionsProvider index; @Check public void checkPrefixCC(PrefixId def) { IResourceDescriptions theIndex = index.getResourceDescriptions(def.eResource()); Iterable<IEObjectDescription> triples = theIndex.getExportedObjectsByType(XturtlePackage.Literals.TRIPLES); QualifiedName myName = getService().getQualifiedName(def); List<IProject> matchingProject=Lists.newArrayList(); IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); for (IEObjectDescription triple : triples) { if(myName.equals(triple.getQualifiedName()) && triple.getEObjectURI().isPlatformResource()) matchingProject.add(root.getProject(triple.getEObjectURI().segment(1))); } if(def.eResource().getURI().isPlatformResource()){ String project = def.eResource().getURI().segment(1); IProject theProject = root.getProject(project); try { IProject[] referencedProjects = theProject.getReferencedProjects(); Set<IProject> referenced= Sets.newHashSet(referencedProjects); List<String> suggestedImports=Lists.newArrayList(); for (IProject iProject : matchingProject) { if(!theProject.equals(iProject) && !referenced.contains(iProject)){ suggestedImports.add(iProject.getName()); } } if(!suggestedImports.isEmpty()){ info("you might want to import "+suggestedImports, XturtlePackage.Literals.PREFIX_ID__ID,IMPORT_PROJECT,suggestedImports.toArray(new String[0])); } } catch (CoreException e) { // TODO Auto-generated catch block e.printStackTrace(); } } // service.g // Severity severity=levels.getNamespaceMismatchLevel(); // if(severity!=null){ // if(def.getId()!=null && prefixes.isKnownPrefix(def.getId())){ // List<String> expectedNs=prefixes.getUris(def.getId()); // if(!expectedNs.contains(service.getUriString(def))){ // createError(severity, "Namespace <"+expectedNs+"> is recommended by prefix.cc", XturtlePackage.Literals.PREFIX_ID__ID); // } // } // } // // severity=levels.getPrefixMismatchLevel(); // if(severity!=null){ // String uri = service.getUriString(def); // if(uri!=null && prefixes.isKnownNameSpace(uri)){ // List<String> expectedPrefixes=prefixes.getPrefixes(uri); // if(def.getId()!=null && !expectedPrefixes.contains(def.getId())){ // createError(severity,"Prefix '"+expectedPrefixes.get(0)+"' is recommended by prefix.cc", XturtlePackage.Literals.PREFIX_ID__ID); // } // } // } } }