2012-04-03 1 views

답변

3

이것은 간단하지 않습니다 :

import org.apache.log4j.Logger; 
import org.eclipse.core.resources.IProject; 
import org.eclipse.core.resources.IResource; 
import org.eclipse.core.resources.IWorkspace; 
import org.eclipse.core.resources.ProjectScope; 
import org.eclipse.core.resources.ResourcesPlugin; 
import org.eclipse.core.runtime.Path; 
import org.eclipse.core.runtime.Platform; 
import org.eclipse.core.runtime.preferences.IPreferencesService; 
import org.eclipse.core.runtime.preferences.IScopeContext; 
import org.eclipse.emf.common.util.URI; 
import com.google.inject.Singleton; 

@Singleton 
public class I18nPreferences { 

    private final static Logger log = Logger.getLogger(I18nPreferences.class); 

    public final static String I18N_QUALIFIER = "com.pany.eclipse.dsl.Dsl"; // name of the prefs file without extension 
    public final static String VALIDATION_IGNORE_PATTERN_KEY = "validation.ignore"; 

    /** Get validation configuration for a resource */ 
    public ValidationConfiguration validationConfiguration(URI uri) { 

     // URI looks like this: 
     // platform:/resource/project/src/.../file.dsl 
     log.debug("Search config for " + uri); 
     ValidationConfiguration config = new ValidationConfiguration(); 

     IPreferencesService service = Platform.getPreferencesService(); 
     if(null == service) { 
      // Probably not running under Eclipse 
      log.debug("No IPreferencesService"); 
      return config; 
     } 

     String platformString = uri.toPlatformString(true); 
     if(null == platformString) { 
      // Probably not running from the Eclipse UI. Might be a unit test or something 
      return config; 
     } 

     IWorkspace workspace = ResourcesPlugin.getWorkspace(); 
     String s = uri.isPlatformResource() ? uri.toPlatformString(true) : uri.toString(); 
     Path path = new Path(s); 
     IResource resource = workspace.getRoot().getFile(path); 

     IProject project = null == resource ? null : resource.getProject(); 
     if(null == resource || null == project) { 
      log.debug("Can't locate project " + uri + " in workspace"); 
      return config; 
     } 

     log.debug("Loading preferences for " + project.getName()); 

     IScopeContext[] contexts = { new ProjectScope(resource.getProject()) }; 

     String defaultValue = ""; 
     String patterns = service.getString(I18N_QUALIFIER, VALIDATION_IGNORE_PATTERN_KEY, defaultValue, contexts); 
     log.debug("Found pattern: " + patterns); 

     config.setIgnoreString(patterns); 

     return config; 
    } 
} 
0

이 적어도 두 가지 가능성이 있습니다 :

  1. 이동하는 UI 프로젝트에 검사기 직접 환경 설정을 사용합니다.

  2. 런타임 프로젝트에서 #isEnabled (..)를 사용하여 ValidatorGuard와 같은 인터페이스를 생성하고 'true'를 반환하는 기본 구현/일부 속성을 사용합니다. UI 프로젝트에서 해당 인터페이스를 구현하십시오. PreferenceStore에서 정보를 읽어 특정 유효성 검사의 실행 가능 상태를 결정할 수도 있습니다. 그것은 보이는