protected void executeOperation() throws EGLModelException {

    IPackageFragmentRoot root = (IPackageFragmentRoot) this.getElementToProcess();
    IEGLPathEntry rootEntry = root.getRawEGLPathEntry();
    IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot();

    // move resource
    if (!root.isExternal()
        && (this.updateModelFlags & IPackageFragmentRoot.NO_RESOURCE_MODIFICATION) == 0) {
      moveResource(root, rootEntry, workspaceRoot);
    }

    // update refering projects classpath excluding orignating project
    IEGLProject originatingProject = root.getEGLProject();
    if ((this.updateModelFlags & IPackageFragmentRoot.OTHER_REFERRING_PROJECTS_EGLPATH) != 0) {
      updateReferringProjectClasspaths(rootEntry.getPath(), originatingProject);
    }

    boolean isRename = this.destination.segment(0).equals(originatingProject.getElementName());
    boolean updateOriginating =
        (this.updateModelFlags & IPackageFragmentRoot.ORIGINATING_PROJECT_EGLPATH) != 0;
    boolean updateDestination =
        (this.updateModelFlags & IPackageFragmentRoot.DESTINATION_PROJECT_EGLPATH) != 0;

    // update originating classpath
    if (updateOriginating) {
      if (isRename && updateDestination) {
        renameEntryInClasspath(rootEntry.getPath(), originatingProject);
      } else {
        removeEntryFromClasspath(rootEntry.getPath(), originatingProject);
      }
    }

    // update destination classpath
    if (updateDestination) {
      if (!isRename || !updateOriginating) {
        addEntryToEGLPath(rootEntry, workspaceRoot);
      } // else reference has been updated when updating originating project classpath
    }
  }