protected IFacetedProject getFacetedProject() {
    IFacetedProject retval = null;

    IProject project = getProject();

    if (project != null) {
      retval = ProjectUtil.getFacetedProject(project);
    }

    return retval;
  }
  public void checkValidProjectTypes() {
    IProject[] projects = CoreUtil.getAllProjects();
    boolean hasValidProjectTypes = false;

    boolean hasJsfFacet = false;

    for (IProject project : projects) {
      if (ProjectUtil.isLiferayProject(project)) {
        Set<IProjectFacetVersion> facets =
            ProjectUtil.getFacetedProject(project).getProjectFacets();

        if (validProjectTypes != null && facets != null) {
          String[] validTypes = validProjectTypes.split(",");

          for (String validProjectType : validTypes) {
            for (IProjectFacetVersion facet : facets) {
              String id = facet.getProjectFacet().getId();

              if (isJsfPortlet && id.equals("jst.jsf")) {
                hasJsfFacet = true;
              }

              if (id.startsWith("liferay.") && id.equals("liferay." + validProjectType)) {
                hasValidProjectTypes = true;
              }
            }
          }
        }
      }
    }

    if (isJsfPortlet) {
      hasValidProjectTypes = hasJsfFacet && hasValidProjectTypes;
    }

    if (!hasValidProjectTypes) {
      final Shell activeShell = Display.getDefault().getActiveShell();
      Boolean openNewLiferayProjectWizard =
          MessageDialog.openQuestion(
              activeShell,
              "New Element",
              "There are no suitable Liferay projects available for this new element.\nDo you want"
                  + " to open the \'New Liferay Project\' wizard now?");

      if (openNewLiferayProjectWizard) {
        Action[] actions = NewPluginProjectDropDownAction.getNewProjectActions();

        if (actions.length > 0) {
          actions[0].run();
          this.checkValidProjectTypes();
        }
      }
    }
  }
  @Override
  public boolean performOk() {
    final String selectedRuntimeName = this.runtimeCombo.getText();

    if (!CoreUtil.isNullOrEmpty(selectedRuntimeName)) {
      final org.eclipse.wst.common.project.facet.core.runtime.IRuntime runtime =
          RuntimeManager.getRuntime(selectedRuntimeName);

      if (runtime != null) {
        final IFacetedProject fProject = ProjectUtil.getFacetedProject(getProject());

        final org.eclipse.wst.common.project.facet.core.runtime.IRuntime primaryRuntime =
            fProject.getPrimaryRuntime();

        if (!runtime.equals(primaryRuntime)) {
          Job job = new WorkspaceJob("Setting targeted runtime for project.") // $NON-NLS-1$
              {
                @Override
                public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException {
                  IStatus retval = Status.OK_STATUS;

                  try {
                    fProject.setTargetedRuntimes(Collections.singleton(runtime), monitor);
                    fProject.setPrimaryRuntime(runtime, monitor);
                  } catch (Exception e) {
                    retval =
                        ProjectUIPlugin.createErrorStatus(
                            "Could not set targeted runtime", e); // $NON-NLS-1$
                  }

                  return retval;
                }
              };

          job.schedule();
        }
      } else {
        return false;
      }
    }

    return true;
  }