Beispiel #1
0
        @Override
        public void resourceChanged(IResourceChangeEvent event) {
          IResourceDelta delta = event.getDelta();
          try {
            class ResourceDeltaVisitor implements IResourceDeltaVisitor {
              protected ResourceSet resourceSet = editingDomain.getResourceSet();
              protected Collection<Resource> changedResources = new ArrayList<Resource>();
              protected Collection<Resource> removedResources = new ArrayList<Resource>();

              public Collection<Resource> getChangedResources() {
                return changedResources;
              }

              public Collection<Resource> getRemovedResources() {
                return removedResources;
              }

              @Override
              public boolean visit(IResourceDelta delta) {
                if (delta.getResource().getType() == IResource.FILE) {
                  if (delta.getKind() == IResourceDelta.REMOVED
                      || delta.getKind() == IResourceDelta.CHANGED
                          && delta.getFlags() != IResourceDelta.MARKERS) {
                    Resource resource =
                        resourceSet.getResource(
                            URI.createPlatformResourceURI(delta.getFullPath().toString(), true),
                            false);
                    if (resource != null) {
                      if (delta.getKind() == IResourceDelta.REMOVED) {
                        removedResources.add(resource);
                      } else if (!savedResources.remove(resource)) {
                        changedResources.add(resource);
                      }
                    }
                  }
                }

                return true;
              }
            }

            final ResourceDeltaVisitor visitor = new ResourceDeltaVisitor();
            delta.accept(visitor);

            if (!visitor.getRemovedResources().isEmpty()) {
              getSite()
                  .getShell()
                  .getDisplay()
                  .asyncExec(
                      new Runnable() {
                        @Override
                        public void run() {
                          removedResources.addAll(visitor.getRemovedResources());
                          if (!isDirty()) {
                            getSite().getPage().closeEditor(RmapEditor.this, false);
                          }
                        }
                      });
            }

            if (!visitor.getChangedResources().isEmpty()) {
              getSite()
                  .getShell()
                  .getDisplay()
                  .asyncExec(
                      new Runnable() {
                        @Override
                        public void run() {
                          changedResources.addAll(visitor.getChangedResources());
                          if (getSite().getPage().getActiveEditor() == RmapEditor.this) {
                            handleActivate();
                          }
                        }
                      });
            }
          } catch (CoreException exception) {
            RmapEditorPlugin.INSTANCE.log(exception);
          }
        }
        public void resourceChanged(IResourceChangeEvent event) {
          // Only listening to these.
          // if (event.getType() == IResourceDelta.POST_CHANGE)
          {
            IResourceDelta delta = event.getDelta();
            try {
              class ResourceDeltaVisitor implements IResourceDeltaVisitor {
                protected ResourceSet resourceSet = editingDomain.getResourceSet();

                protected Collection changedResources = new ArrayList();

                protected Collection removedResources = new ArrayList();

                public boolean visit(IResourceDelta delta) {
                  if (delta.getFlags() != IResourceDelta.MARKERS
                      && delta.getResource().getType() == IResource.FILE) {
                    if ((delta.getKind() & (IResourceDelta.CHANGED | IResourceDelta.REMOVED))
                        != 0) {
                      Resource resource =
                          resourceSet.getResource(
                              URI.createURI(delta.getFullPath().toString()), false);
                      if (resource != null) {
                        if ((delta.getKind() & IResourceDelta.REMOVED) != 0) {
                          removedResources.add(resource);
                        } else {
                          changedResources.add(resource);
                        }
                      }
                    }
                  }

                  return true;
                }

                public Collection getChangedResources() {
                  return changedResources;
                }

                public Collection getRemovedResources() {
                  return removedResources;
                }
              }

              ResourceDeltaVisitor visitor = new ResourceDeltaVisitor();
              delta.accept(visitor);

              if (!visitor.getRemovedResources().isEmpty()) {
                removedResources.addAll(visitor.getRemovedResources());
                if (!isDirty()) {
                  getSite()
                      .getShell()
                      .getDisplay()
                      .asyncExec(
                          new Runnable() {
                            public void run() {
                              getSite().getPage().closeEditor(GenfwEditor.this, false);
                              GenfwEditor.this.dispose();
                            }
                          });
                }
              }

              if (!visitor.getChangedResources().isEmpty()) {
                changedResources.addAll(visitor.getChangedResources());
              }
            } catch (CoreException exception) {
              GenfwEditorPlugin.INSTANCE.log(exception);
            }
          }
        }