Java 类org.eclipse.core.runtime.jobs.ISchedulingRule 实例源码

项目:termsuite-ui    文件:ProgressServiceImpl.java   
@Override
public void runInUI(IRunnableContext context,
        IRunnableWithProgress runnable, ISchedulingRule rule)
        throws InvocationTargetException, InterruptedException {
    final RunnableWithStatus runnableWithStatus = new RunnableWithStatus(
            context,
            runnable, rule);
    uiSynchronize.syncExec(new Runnable() {
        @Override
        public void run() {
            BusyIndicator.showWhile(getDisplay(), runnableWithStatus);
        }

    });

    IStatus status = runnableWithStatus.getStatus();
    if (!status.isOK()) {
        Throwable exception = status.getException();
        if (exception instanceof InvocationTargetException)
            throw (InvocationTargetException) exception;
        else if (exception instanceof InterruptedException)
            throw (InterruptedException) exception;
        else // should be OperationCanceledException
            throw new InterruptedException(exception.getMessage());
    }
}
项目:subclipse    文件:RepositoryProviderOperation.java   
public void execute(IProgressMonitor monitor) throws SVNException, InterruptedException {
    Map table = getProviderMapping(getResources());
    Set keySet = table.keySet();
    monitor.beginTask(null, keySet.size() * 1000);
    Iterator iterator = keySet.iterator();
    while (iterator.hasNext()) {
        IProgressMonitor subMonitor = new SubProgressMonitor(monitor, 1000);
        SVNTeamProvider provider = (SVNTeamProvider)iterator.next();
        List list = (List)table.get(provider);
        IResource[] providerResources = (IResource[])list.toArray(new IResource[list.size()]);
        ISchedulingRule rule = getSchedulingRule(provider);
        try {
            Job.getJobManager().beginRule(rule, monitor);
            monitor.setTaskName(getTaskName(provider));
            execute(provider, providerResources, subMonitor);
        } finally {
            Job.getJobManager().endRule(rule);
        }
    }
}
项目:subclipse    文件:RepositoryProviderOperation.java   
/**
 * Retgurn the scheduling rule to be obtained before work
 * begins on the given provider. By default, it is the provider's project.
 * This can be changed by subclasses.
 * @param provider
 * @return
 */
protected ISchedulingRule getSchedulingRule(SVNTeamProvider provider) {
    IResourceRuleFactory ruleFactory = provider.getRuleFactory();
    HashSet rules = new HashSet();
    IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
    for (int i = 0; i < resources.length; i++) {            
        IResource[] pathResources = SVNWorkspaceRoot.getResourcesFor(new Path(resources[i].getLocation().toOSString()), false);
        for (IResource pathResource : pathResources) {
            IProject resourceProject = pathResource.getProject();               
            rules.add(ruleFactory.modifyRule(resourceProject));
            if (resourceProject.getLocation() != null) {
                // Add nested projects
                for (IProject project : projects) {
                    if (project.getLocation() != null) {
                        if (!project.getLocation().equals(resourceProject.getLocation()) && resourceProject.getLocation().isPrefixOf(project.getLocation())) {
                            rules.add(ruleFactory.modifyRule(project));
                        }
                    }
                }   
            }
        }
    }
    return MultiRule.combine((ISchedulingRule[]) rules.toArray(new ISchedulingRule[rules.size()]));
}
项目:tlaplus    文件:ResourceHelper.java   
/**
 * Retrieves a combined rule for modifying the resources
 * @param resources set of resources
 * @return a combined rule
 */
public static ISchedulingRule getModifyRule(IResource[] resources)
{
    if (resources == null)
    {
        return null;
    }
    ISchedulingRule combinedRule = null;
    IResourceRuleFactory ruleFactory = ResourcesPlugin.getWorkspace().getRuleFactory();
    for (int i = 0; i < resources.length; i++)
    {
        // if one of the resources does not exist
        // something is screwed up
        if (resources[i] == null || !resources[i].exists())
        {
            return null;
        }
        ISchedulingRule rule = ruleFactory.modifyRule(resources[i]);
        combinedRule = MultiRule.combine(rule, combinedRule);
    }
    return combinedRule;
}
项目:tlaplus    文件:ResourceHelper.java   
/**
 * Retrieves a combined rule for deleting resource
 * @param resource
 * @return
 */
public static ISchedulingRule getDeleteRule(IResource[] resources)
{
    if (resources == null)
    {
        return null;
    }
    ISchedulingRule combinedRule = null;
    IResourceRuleFactory ruleFactory = ResourcesPlugin.getWorkspace().getRuleFactory();
    for (int i = 0; i < resources.length; i++)
    {
        ISchedulingRule rule = ruleFactory.deleteRule(resources[i]);
        combinedRule = MultiRule.combine(rule, combinedRule);
    }
    return combinedRule;
}
项目:tlaplus    文件:ResourceHelper.java   
/**
 * Retrieves a combined rule for creating resource
 * @param resource
 * @return
 */
public static ISchedulingRule getCreateRule(IResource[] resources)
{
    if (resources == null)
    {
        return null;
    }
    ISchedulingRule combinedRule = null;
    IResourceRuleFactory ruleFactory = ResourcesPlugin.getWorkspace().getRuleFactory();
    for (int i = 0; i < resources.length; i++)
    {
        ISchedulingRule rule = ruleFactory.createRule(resources[i]);
        combinedRule = MultiRule.combine(rule, combinedRule);
    }
    return combinedRule;
}
项目:APICloud-Studio    文件:RepositoryProviderOperation.java   
/**
 * Retgurn the scheduling rule to be obtained before work
 * begins on the given provider. By default, it is the provider's project.
 * This can be changed by subclasses.
 * @param provider
 * @return
 */
protected ISchedulingRule getSchedulingRule(SVNTeamProvider provider) {
    IResourceRuleFactory ruleFactory = provider.getRuleFactory();
    HashSet rules = new HashSet();
    IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
    for (int i = 0; i < resources.length; i++) {            
        IResource[] pathResources = SVNWorkspaceRoot.getResourcesFor(new Path(resources[i].getLocation().toOSString()), false);
        for (IResource pathResource : pathResources) {
            IProject resourceProject = pathResource.getProject();               
            rules.add(ruleFactory.modifyRule(resourceProject));
            if (resourceProject.getLocation() != null) {
                // Add nested projects
                for (IProject project : projects) {
                    if (project.getLocation() != null) {
                        if (!project.getLocation().equals(resourceProject.getLocation()) && resourceProject.getLocation().isPrefixOf(project.getLocation())) {
                            rules.add(ruleFactory.modifyRule(project));
                        }
                    }
                }   
            }
        }
    }
    return MultiRule.combine((ISchedulingRule[]) rules.toArray(new ISchedulingRule[rules.size()]));
}
项目:xtext-gef    文件:StatemachineDocumentProvider.java   
/**
 * @generated
 */
protected ISchedulingRule getResetRule(Object element) {
    ResourceSetInfo info = getResourceSetInfo(element);
    if (info != null) {
        LinkedList<ISchedulingRule> rules = new LinkedList<ISchedulingRule>();
        for (Iterator<Resource> it = info.getLoadedResourcesIterator(); it
                .hasNext();) {
            Resource nextResource = it.next();
            IFile file = WorkspaceSynchronizer.getFile(nextResource);
            if (file != null) {
                rules.add(ResourcesPlugin.getWorkspace().getRuleFactory()
                        .modifyRule(file));
            }
        }
        return new MultiRule(
                (ISchedulingRule[]) rules.toArray(new ISchedulingRule[rules
                        .size()]));
    }
    return null;
}
项目:xtext-gef    文件:StatemachineDocumentProvider.java   
/**
 * @generated
 */
protected ISchedulingRule getSaveRule(Object element) {
    ResourceSetInfo info = getResourceSetInfo(element);
    if (info != null) {
        LinkedList<ISchedulingRule> rules = new LinkedList<ISchedulingRule>();
        for (Iterator<Resource> it = info.getLoadedResourcesIterator(); it
                .hasNext();) {
            Resource nextResource = it.next();
            IFile file = WorkspaceSynchronizer.getFile(nextResource);
            if (file != null) {
                rules.add(computeSchedulingRule(file));
            }
        }
        return new MultiRule(
                (ISchedulingRule[]) rules.toArray(new ISchedulingRule[rules
                        .size()]));
    }
    return null;
}
项目:che    文件:WorkManager.java   
/** An operation calls this method and it only returns when the operation is free to run. */
public void checkIn(ISchedulingRule rule, IProgressMonitor monitor) throws CoreException {
  boolean success = false;
  try {
    if (workspace.isTreeLocked()) {
      String msg = Messages.resources_cannotModify;
      throw new ResourceException(IResourceStatus.WORKSPACE_LOCKED, null, msg, null);
    }
    jobManager.beginRule(rule, monitor);
    lock.acquire();
    incrementPreparedOperations();
    success = true;
  } finally {
    // remember if we failed to check in, so we can avoid check out
    if (!success) checkInFailed.set(Boolean.TRUE);
  }
}
项目:che    文件:Rules.java   
/** Combines rules for each parameter to validateEdit from the corresponding rule factories. */
public ISchedulingRule validateEditRule(IResource[] resources) {
  if (resources.length == 0) return null;
  // optimize rule for single file
  if (resources.length == 1) {
    if (resources[0].getType() == IResource.ROOT) return root;
    return factoryFor(resources[0]).validateEditRule(resources);
  }
  // gather rules for each resource from appropriate factory
  HashSet<ISchedulingRule> rules = new HashSet<ISchedulingRule>();
  IResource[] oneResource = new IResource[1];
  for (int i = 0; i < resources.length; i++) {
    if (resources[i].getType() == IResource.ROOT) return root;
    oneResource[0] = resources[i];
    ISchedulingRule rule = factoryFor(resources[i]).validateEditRule(oneResource);
    if (rule != null) rules.add(rule);
  }
  if (rules.isEmpty()) return null;
  if (rules.size() == 1) return rules.iterator().next();
  ISchedulingRule[] ruleArray = rules.toArray(new ISchedulingRule[rules.size()]);
  return new MultiRule(ruleArray);
}
项目:che    文件:Resource.java   
@Override
public boolean isConflicting(ISchedulingRule rule) {
  if (this == rule) return true;
  // must not schedule at same time as notification
  if (rule.getClass().equals(WorkManager.NotifyRule.class)) return true;
  if (rule instanceof MultiRule) {
    MultiRule multi = (MultiRule) rule;
    ISchedulingRule[] children = multi.getChildren();
    for (int i = 0; i < children.length; i++) if (isConflicting(children[i])) return true;
    return false;
  }
  if (!(rule instanceof IResource)) return false;
  IResource resource = (IResource) rule;
  if (!workspace.equals(resource.getWorkspace())) return false;
  IPath otherPath = resource.getFullPath();
  return path.isPrefixOf(otherPath) || otherPath.isPrefixOf(path);
}
项目:datahierarchy    文件:ExclusiveRule.java   
@Override
public boolean isConflicting(ISchedulingRule rule) {
    if(this == rule){
        return true;
    }
    if(rule instanceof ExclusiveRule) {
        ExclusiveRule rule2 = (ExclusiveRule) rule;
        IJavaElement element = root.getJavaElement();
        IJavaElement element2 = rule2.root.getJavaElement();
        if(element.equals(element2)){
            return true;
        }
        if(MULTICORE) {
            return tooManyJobsThere();
        }
        return true;
    }
    return false;
}
项目:che    文件:Rules.java   
/** Combines rules for each parameter to validateEdit from the corresponding rule factories. */
public ISchedulingRule validateEditRule(IResource[] resources) {
  if (resources.length == 0) return null;
  // optimize rule for single file
  if (resources.length == 1) {
    if (resources[0].getType() == IResource.ROOT) return root;
    return factoryFor(resources[0]).validateEditRule(resources);
  }
  // gather rules for each resource from appropriate factory
  HashSet<ISchedulingRule> rules = new HashSet<ISchedulingRule>();
  IResource[] oneResource = new IResource[1];
  for (int i = 0; i < resources.length; i++) {
    if (resources[i].getType() == IResource.ROOT) return root;
    oneResource[0] = resources[i];
    ISchedulingRule rule = factoryFor(resources[i]).validateEditRule(oneResource);
    if (rule != null) rules.add(rule);
  }
  if (rules.isEmpty()) return null;
  if (rules.size() == 1) return rules.iterator().next();
  ISchedulingRule[] ruleArray = rules.toArray(new ISchedulingRule[rules.size()]);
  return new MultiRule(ruleArray);
}
项目:che    文件:WorkspaceModifyOperation.java   
public void threadChange(Thread thread) {
  // we must make sure we aren't transferring control away from a thread that
  // already owns a scheduling rule because this is deadlock prone (bug 105491)
  if (rule == null) {
    return;
  }
  Job currentJob = Job.getJobManager().currentJob();
  if (currentJob == null) {
    return;
  }
  ISchedulingRule currentRule = currentJob.getRule();
  if (currentRule == null) {
    return;
  }
  throw new IllegalStateException(
      "Cannot fork a thread from a thread owning a rule"); // $NON-NLS-1$
}
项目:n4js    文件:AbstractBuilderTest.java   
/**
 * Performs some general validity checks on the Xtext index. Only intended to be used in tests (e.g. no support for
 * cancellation).
 */
protected void assertXtextIndexIsValid() {
    // ensure no build is running while we examine the Xtext index
    final ISchedulingRule rule = externalLibraryBuilderHelper.getRule();
    try {
        Job.getJobManager().beginRule(rule, null);
        assertXtextIndexIsValidInternal();
    } finally {
        Job.getJobManager().endRule(rule);
    }
}
项目:n4js    文件:EclipseExternalLibraryWorkspace.java   
@Override
public void storeUpdated(final ExternalLibraryPreferenceStore store, final IProgressMonitor monitor) {
    final ISchedulingRule rule = builderHelper.getRule();
    try {
        Job.getJobManager().beginRule(rule, monitor);
        storeUpdatedInternal(store, monitor);
    } finally {
        Job.getJobManager().endRule(rule);
    }
}
项目:n4js    文件:EclipseExternalLibraryWorkspace.java   
@Override
public void registerProjects(NpmProjectAdaptionResult result, IProgressMonitor monitor, boolean triggerCleanbuild) {
    final ISchedulingRule rule = builderHelper.getRule();
    try {
        Job.getJobManager().beginRule(rule, monitor);
        registerProjectsInternal(result, monitor, triggerCleanbuild);
    } finally {
        Job.getJobManager().endRule(rule);
    }
}
项目:n4js    文件:ExternalLibrariesReloadHelper.java   
/**
 * Reloads the external libraries by re-indexing all registered external projects that are do not exist in the
 * workspace.
 *
 * @param refreshNpmDefinitions
 *            if {@code true}, then the type definition files will be reloaded/refreshed for all {@code npm}
 *            packages.
 * @param monitor
 *            the monitor for the process.
 * @throws InvocationTargetException
 *             if any unexpected error occurs during the refresh process.
 */
public void reloadLibraries(final boolean refreshNpmDefinitions, final IProgressMonitor monitor)
        throws InvocationTargetException {

    final ISchedulingRule rule = builderHelper.getRule();
    try {
        Job.getJobManager().beginRule(rule, monitor);
        reloadLibrariesInternal(refreshNpmDefinitions, monitor);
    } catch (final OperationCanceledException e) {
        LOGGER.info("User abort.");
    } finally {
        Job.getJobManager().endRule(rule);
    }
}
项目:n4js    文件:NpmManager.java   
private static <T> T runWithWorkspaceLock(Supplier<T> operation) {
    if (Platform.isRunning()) {
        final ISchedulingRule rule = ResourcesPlugin.getWorkspace().getRoot();
        try {
            Job.getJobManager().beginRule(rule, null);
            return operation.get();
        } finally {
            Job.getJobManager().endRule(rule);
        }
    } else {
        // locking not available/required in headless case
        return operation.get();
    }
}
项目:bdf2    文件:WizardNewFileCreationPage.java   
/**
 * Returns the scheduling rule to use when creating the resource at the
 * given container path. The rule should be the creation rule for the
 * top-most non-existing parent.
 * 
 * @param resource
 *            The resource being created
 * @return The scheduling rule for creating the given resource
 * @since 3.1
 * @deprecated As of 3.3, scheduling rules are provided by the undoable
 *             operation that this page creates and executes.
 */
protected ISchedulingRule createRule(IResource resource) {
    IResource parent = resource.getParent();
    while (parent != null) {
        if (parent.exists()) {
            return resource.getWorkspace().getRuleFactory()
                    .createRule(resource);
        }
        resource = parent;
        parent = parent.getParent();
    }
    return resource.getWorkspace().getRoot();
}
项目:subclipse    文件:SVNProjectSetCapability.java   
/**
   * Checkout projects from the SVN repository
   * 
   * @param projects
   *            the projects to be loaded from the repository
   * @param infoMap
   *            a mapping of project to project load information
   * @param monitor
   *            the progress monitor (not <code>null</code>)
   */
  private IProject[] checkout(IProject[] projects, Map<IProject, LoadInfo> infoMap,
          IProgressMonitor monitor) throws TeamException, MalformedURLException {
      if(projects==null || projects.length==0) {
        return new IProject[0];
      }
      ISchedulingRule[] ruleArray = new ISchedulingRule[projects.length];
      for (int i = 0; i < projects.length; i++) {
          ruleArray[i] = projects[i].getWorkspace().getRuleFactory().modifyRule(projects[i]);
}
      ISchedulingRule rule= MultiRule.combine(ruleArray);
Job.getJobManager().beginRule(rule, monitor);
      monitor.beginTask("", 1000 * projects.length); //$NON-NLS-1$
      List<IProject> result = new ArrayList<IProject>();
      try {
          for (IProject project : projects) {
              if (monitor.isCanceled()) {
                  break;
              }
              LoadInfo info = infoMap.get(project);
              if (info != null
                      && info.checkout(new SubProgressMonitor(monitor, 1000))) {
                  result.add(project);
              }
          }
      } finally {
        Job.getJobManager().endRule(rule);
          monitor.done();
      }
      return result.toArray(new IProject[result.size()]);
  }
项目:subclipse    文件:UpdateOperation.java   
protected ISchedulingRule getSchedulingRule(SVNTeamProvider provider) {
    ISchedulingRule schedulingRule = super.getSchedulingRule(provider);
    if (schedulingRule != null && conflictResolver != null) {
        ((SVNConflictResolver)conflictResolver).setSchedulingRule(schedulingRule);
    }
    return schedulingRule;
}
项目:subclipse    文件:CheckoutAsProjectOperation.java   
protected ISchedulingRule getSchedulingRule(SVNTeamProvider provider) {
    IResourceRuleFactory ruleFactory = provider.getRuleFactory();
    HashSet rules = new HashSet();
    for (int i = 0; i < localFolders.length; i++) {
        rules.add(ruleFactory.modifyRule(localFolders[i].getProject()));
    }
    return MultiRule.combine((ISchedulingRule[]) rules.toArray(new ISchedulingRule[rules.size()]));
}
项目:subclipse    文件:BranchTagOperation.java   
protected ISchedulingRule getSchedulingRule(SVNTeamProvider provider) {
    IResource[] resources = getResources();
    if (resources == null) return super.getSchedulingRule(provider);
    IResourceRuleFactory ruleFactory = provider.getRuleFactory();
    HashSet<ISchedulingRule> rules = new HashSet<ISchedulingRule>();
    for (int i = 0; i < resources.length; i++) {
        rules.add(ruleFactory.modifyRule(resources[i].getProject()));
    }
    return MultiRule.combine((ISchedulingRule[]) rules.toArray(new ISchedulingRule[rules.size()]));
}
项目:google-cloud-eclipse    文件:FlexExistingDeployArtifactStagingDelegateTest.java   
@Test
public void testSchedulingRule_artifactInWorkspace() throws CoreException {
  IPath deployArtifact = createFileInProject("in-workspace.war");

  StagingDelegate delegate = new FlexExistingDeployArtifactStagingDelegate(
      deployArtifact, appEngineDirectory);

  ISchedulingRule rule = delegate.getSchedulingRule();
  assertTrue(rule instanceof IFile);
  IFile file = (IFile) rule;
  assertTrue(file.exists());
}
项目:andmore2    文件:NewAppWizard.java   
@Override
public boolean performFinish() {
    AppProjectGenerator generator = new AppProjectGenerator(getTemplateManifestPath());
    generator.setProjectName(mainPage.getProjectName());
    if (!mainPage.useDefaults()) {
        generator.setLocationURI(mainPage.getLocationURI());
    }
    generator.setPackageName("com.example.emptyapp");
    generator.setActivityName("MainActivity");
    generator.setLayoutName("activity_main");

    Map<String, Object> model = new HashMap<>();

    try {
        getContainer().run(true, true, new WorkspaceModifyOperation() {
            @Override
            protected void execute(IProgressMonitor monitor)
                    throws CoreException, InvocationTargetException, InterruptedException {
                monitor.beginTask("Generating project", 1); //$NON-NLS-1$
                generator.generate(model, monitor);
                monitor.done();
            }

            @Override
            public ISchedulingRule getRule() {
                return ResourcesPlugin.getWorkspace().getRoot();
            }
        });
    } catch (InterruptedException | InvocationTargetException e) {
        throw new RuntimeException(e);
    }
    return true;
}
项目:mesfavoris    文件:BookmarksMarkers.java   
private ISchedulingRule getMarkerRule(IResource resource) {
    ISchedulingRule rule = null;
    if (resource != null) {
        IResourceRuleFactory ruleFactory = ResourcesPlugin.getWorkspace().getRuleFactory();
        rule = ruleFactory.markerRule(resource);
    }
    return rule;
}
项目:tlaplus    文件:ResourceHelper.java   
/**
 * Retrieves a rule for modifying a resource
 * @param resource
 * @return
 */
public static ISchedulingRule getModifyRule(IResource resource)
{
    IResourceRuleFactory ruleFactory = ResourcesPlugin.getWorkspace().getRuleFactory();
    ISchedulingRule rule = ruleFactory.modifyRule(resource);
    return rule;
}
项目:bts    文件:SchedulingRuleFactory.java   
public boolean isConflicting(ISchedulingRule rule) {
    if (rule instanceof SerialPerObjectRule) {
        SerialPerObjectRule serialPerObjectRule = (SerialPerObjectRule) rule;
        return lockObject == serialPerObjectRule.lockObject;
    }
    return false;
}
项目:che    文件:WorkManager.java   
/**
 * Returns true if the check in for this thread failed, in which case the check out and other end
 * of operation code should not run.
 *
 * <p>The failure flag is reset immediately after calling this method. Subsequent calls to this
 * method will indicate no failure (unless a new failure has occurred).
 *
 * @return <code>true</code> if the checkIn failed, and <code>false</code> otherwise.
 */
public boolean checkInFailed(ISchedulingRule rule) {
  if (checkInFailed.get() != null) {
    // clear the failure flag for this thread
    checkInFailed.set(null);
    // must still end the rule even in the case of failure
    if (!workspace.isTreeLocked()) jobManager.endRule(rule);
    return true;
  }
  return false;
}
项目:APICloud-Studio    文件:CheckoutAsProjectOperation.java   
protected ISchedulingRule getSchedulingRule(SVNTeamProvider provider) {
    IResourceRuleFactory ruleFactory = provider.getRuleFactory();
    HashSet rules = new HashSet();
    for (int i = 0; i < localFolders.length; i++) {
        rules.add(ruleFactory.modifyRule(localFolders[i].getProject()));
    }
    return MultiRule.combine((ISchedulingRule[]) rules.toArray(new ISchedulingRule[rules.size()]));
}
项目:che    文件:File.java   
@Override
public void setContents(InputStream content, int updateFlags, IProgressMonitor monitor)
    throws CoreException {
  monitor = Policy.monitorFor(monitor);
  try {
    String message = NLS.bind(Messages.resources_settingContents, getFullPath());
    monitor.beginTask(message, Policy.totalWork);
    //            if (workspace.shouldValidate)
    //                workspace.validateSave(this);
    final ISchedulingRule rule = workspace.getRuleFactory().modifyRule(this);
    try {
      workspace.prepareOperation(rule, monitor);
      ResourceInfo info = getResourceInfo(false, false);
      //                checkAccessible(getFlags(info));
      workspace.beginOperation(true);
      //                IFileInfo fileInfo = getStore().fetchInfo();
      internalSetContents(
          content, updateFlags, false, Policy.subMonitorFor(monitor, Policy.opWork));
    } catch (OperationCanceledException e) {
      workspace.getWorkManager().operationCanceled();
      throw e;
    } finally {
      workspace.endOperation(rule, true, Policy.subMonitorFor(monitor, Policy.endOpWork));
    }
  } finally {
    monitor.done();
    FileUtil.safeClose(content);
  }
}
项目:che    文件:Rules.java   
/** Obtains the scheduling rule from the appropriate factories for a move operation. */
public ISchedulingRule moveRule(IResource source, IResource destination) {
  if (source.getType() == IResource.ROOT || destination.getType() == IResource.ROOT) return root;
  // treat a move across projects as a create on the destination and a delete on the source
  if (!source.getFullPath().segment(0).equals(destination.getFullPath().segment(0)))
    return MultiRule.combine(
        modifyRule(source.getProject()), modifyRule(destination.getProject()));
  return factoryFor(source).moveRule(source, destination);
}
项目:che    文件:Workspace.java   
@Override
public void run(
    IWorkspaceRunnable action, ISchedulingRule rule, int options, IProgressMonitor monitor)
    throws CoreException {
  monitor = Policy.monitorFor(monitor);
  try {
    monitor.beginTask("", Policy.totalWork); // $NON-NLS-1$
    int depth = -1;
    boolean avoidNotification = (options & IWorkspace.AVOID_UPDATE) != 0;
    try {
      prepareOperation(rule, monitor);
      beginOperation(true);
      //                if (avoidNotification)
      //                    avoidNotification = notificationManager.beginAvoidNotify();
      depth = getWorkManager().beginUnprotected();
      action.run(
          Policy.subMonitorFor(
              monitor, Policy.opWork, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK));
    } catch (OperationCanceledException e) {
      getWorkManager().operationCanceled();
      throw e;
    } finally {
      //                if (avoidNotification)
      //                    notificationManager.endAvoidNotify();
      if (depth >= 0) {
        getWorkManager().endUnprotected(depth);
      }
      endOperation(rule, false, Policy.subMonitorFor(monitor, Policy.endOpWork));
    }
  } finally {
    monitor.done();
  }
}
项目:APICloud-Studio    文件:UnifiedBuilder.java   
/**
 * @param resource
 * @return
 */
private static ISchedulingRule getMarkerRule(Object resource)
{
    if (resource instanceof IResource)
    {
        return ResourcesPlugin.getWorkspace().getRuleFactory().markerRule((IResource) resource);
    }
    return null;
}
项目:che    文件:ResourceRuleFactory.java   
/**
 * Convenience method to return the parent of the given resource, or the resource itself for
 * projects and the workspace root.
 *
 * @param resource the resource to compute the parent of
 * @return the parent resource for folders and files, and the resource itself for projects and the
 *     workspace root.
 */
protected final ISchedulingRule parent(IResource resource) {
  switch (resource.getType()) {
    case IResource.ROOT:
    case IResource.PROJECT:
      return resource;
    default:
      return resource.getParent();
  }
}
项目:che    文件:ResourceRuleFactory.java   
/**
 * Default implementation of <code>IResourceRuleFactory#validateEditRule</code>. This default
 * implementation returns a rule that combines the parents of all read-only resources, or <code>
 * null</code> if there are no read-only resources.
 *
 * <p>Subclasses may override this method. The rule provided by an overriding method must at least
 * contain the rule from this default implementation.
 *
 * @see
 *     org.eclipse.core.runtime.jobs.ISchedulingRule#contains(org.eclipse.core.runtime.jobs.ISchedulingRule)
 * @see org.eclipse.core.resources.IResourceRuleFactory#validateEditRule(IResource[])
 */
public ISchedulingRule validateEditRule(IResource[] resources) {
  if (resources.length == 0) return null;
  // optimize rule for single file
  if (resources.length == 1) return isReadOnly(resources[0]) ? parent(resources[0]) : null;
  // need a lock on the parents of all read-only files
  HashSet<ISchedulingRule> rules = new HashSet<ISchedulingRule>();
  for (int i = 0; i < resources.length; i++)
    if (isReadOnly(resources[i])) rules.add(parent(resources[i]));
  if (rules.isEmpty()) return null;
  if (rules.size() == 1) return rules.iterator().next();
  ISchedulingRule[] ruleArray = rules.toArray(new ISchedulingRule[rules.size()]);
  return new MultiRule(ruleArray);
}
项目:APICloud-Studio    文件:BundleManager.java   
public boolean isConflicting(ISchedulingRule rule)
{
    if (rule instanceof SerialPerObjectRule)
    {
        SerialPerObjectRule vup = (SerialPerObjectRule) rule;

        return fObject == vup.fObject;
    }

    return false;
}
项目:gama    文件:CloseResourceAction.java   
/**
 * The implementation of this <code>WorkspaceAction</code> method method saves and closes the resource's dirty
 * editors before closing it.
 */
@Override
public void run() {
    // Get the items to close.
    final List<? extends IResource> projects = getSelectedResources();
    if (projects == null || projects.isEmpty()) {
        // no action needs to be taken since no projects are selected
        return;
    }

    final IResource[] projectArray = projects.toArray(new IResource[projects.size()]);

    if (!IDE.saveAllEditors(projectArray, true)) { return; }
    if (!validateClose()) { return; }

    closeMatchingEditors(projects, false);

    // be conservative and include all projects in the selection - projects
    // can change state between now and when the job starts
    ISchedulingRule rule = null;
    final IResourceRuleFactory factory = ResourcesPlugin.getWorkspace().getRuleFactory();
    for (final IResource element : projectArray) {
        final IProject project = (IProject) element;
        rule = MultiRule.combine(rule, factory.modifyRule(project));
    }
    runInBackground(rule);
}