public static IStatus cssBuild(IProject project) throws CoreException {

    SDK sdk = SDKUtil.getSDK(project);

    if (sdk == null) {
      throw new CoreException(
          ThemeCore.createErrorStatus("No SDK for project configured. Could not build theme."));
    }

    ILiferayRuntime liferayRuntime = ServerUtil.getLiferayRuntime(project);

    if (liferayRuntime == null) {
      throw new CoreException(
          ThemeCore.createErrorStatus(
              "Could not get portal runtime for project.  Could not build theme."));
    }

    Map<String, String> appServerProperties = ServerUtil.configureAppServerProperties(project);

    IStatus status = sdk.compileThemePlugin(project, null, appServerProperties);

    if (!status.isOK()) {
      throw new CoreException(status);
    }

    IFolder docroot = CoreUtil.getDocroot(project);

    IFile lookAndFeelFile =
        docroot.getFile("WEB-INF/" + ILiferayConstants.LIFERAY_LOOK_AND_FEEL_XML_FILE);

    if (!lookAndFeelFile.exists()) {
      String id = project.getName().replaceAll(ISDKConstants.THEME_PLUGIN_PROJECT_SUFFIX, "");
      IFile propsFile =
          docroot.getFile("WEB-INF/" + ILiferayConstants.LIFERAY_PLUGIN_PACKAGE_PROPERTIES_FILE);
      String name = id;
      if (propsFile.exists()) {
        Properties props = new Properties();
        try {
          props.load(propsFile.getContents());
          String nameValue = props.getProperty("name");
          if (!CoreUtil.isNullOrEmpty(nameValue)) {
            name = nameValue;
          }
        } catch (IOException e) {
          ThemeCore.logError("Unable to load plugin package properties.", e);
        }
      }

      if (liferayRuntime != null) {
        ThemeDescriptorHelper.createDefaultFile(
            lookAndFeelFile, liferayRuntime.getPortalVersion() + "+", id, name);
      }
    }

    if (docroot != null && docroot.exists()) {
      docroot.refreshLocal(IResource.DEPTH_INFINITE, null);
    }

    return status;
  }
  public static IStatus compileTheme(IProject project) throws CoreException {
    final SDK sdk = SDKUtil.getSDK(project);

    if (sdk == null) {
      throw new CoreException(
          ThemeCore.createErrorStatus(
              "No SDK for project configured. Could not build theme.")); //$NON-NLS-1$
    }

    final IStatus status = sdk.compileThemePlugin(project, null);

    if (!status.isOK()) {
      throw new CoreException(status);
    }

    ensureLookAndFeelFileExists(project);

    try {
      project.refreshLocal(IResource.DEPTH_INFINITE, null);
    } catch (Exception e) {
      ThemeCore.logError(e);
    }

    return status;
  }
  protected void incrementalBuild(IResourceDelta delta, final IProgressMonitor monitor) {
    int deltaKind = delta.getKind();

    if (deltaKind == IResourceDelta.REMOVED) {
      return;
    }

    // final boolean[] buildCSS = new boolean[1];

    try {
      delta.accept(
          new IResourceDeltaVisitor() {
            public boolean visit(IResourceDelta delta) {
              final IResource resource = delta.getResource();
              IPath fullResourcePath = resource.getFullPath();

              for (String segment : fullResourcePath.segments()) {
                if ("_diffs".equals(segment)) // $NON-NLS-1$
                {
                  // IDE-110 IDE-648
                  final IWebProject webproject =
                      LiferayCore.create(IWebProject.class, getProject());

                  if (webproject != null && webproject.getDefaultDocrootFolder() != null) {
                    IFolder webappRoot = webproject.getDefaultDocrootFolder();

                    if (webappRoot != null) {
                      IFolder diffs = webappRoot.getFolder(new Path("_diffs")); // $NON-NLS-1$

                      if (diffs != null
                          && diffs.exists()
                          && diffs.getFullPath().isPrefixOf(fullResourcePath)) {
                        applyDiffsDeltaToDocroot(delta, diffs.getParent(), monitor);

                        return false;
                      }
                    }
                  }
                } else if ("build.xml".equals(segment)) // IDE-828 //$NON-NLS-1$
                {
                  IPath relPath = resource.getProjectRelativePath();

                  if (relPath != null && relPath.segmentCount() == 1) {
                    try {
                      compileTheme(resource.getProject());
                    } catch (CoreException e) {
                      ThemeCore.logError("Error compiling theme.", e); // $NON-NLS-1$
                    }
                  }
                }
              }

              return true; // visit children too
            }
          });
    } catch (CoreException e) {
      ThemeCore.logError(e);
    }
  }
 protected void fullBuild(Map args, IProgressMonitor monitor) {
   try {
     if (shouldFullBuild(args)) {
       cssBuild(getProject(args));
     }
   } catch (Exception e) {
     ThemeCore.logError("Full build failed for Theme CSS Builder", e);
   }
 }
  protected void incrementalBuild(IResourceDelta delta, IProgressMonitor monitor) {
    int deltaKind = delta.getKind();

    if (deltaKind == IResourceDelta.REMOVED || deltaKind == IResourceDelta.REMOVED_PHANTOM) {
      return;
    }

    final boolean[] buildCSS = new boolean[1];

    try {
      delta.accept(
          new IResourceDeltaVisitor() {

            private IFolder docroot = null;

            public boolean visit(IResourceDelta delta) {
              IPath fullResourcePath = delta.getResource().getFullPath();

              for (String segment : fullResourcePath.segments()) {
                if ("_diffs".equals(segment)) {
                  if (docroot == null) {
                    docroot = CoreUtil.getDocroot(getProject());
                  }

                  IFolder diffs = docroot.getFolder("_diffs");

                  if (diffs.exists() && diffs.getFullPath().isPrefixOf(fullResourcePath)) {
                    buildCSS[0] = true;

                    return false;
                  }
                }
              }

              return true; // visit children too
            }
          });
    } catch (CoreException e) {
      e.printStackTrace();
    }

    if (buildCSS[0]) {
      try {
        cssBuild(getProject());
      } catch (CoreException e) {
        ThemeCore.logError("Error in Theme CSS Builder", e);
      }
    }
  }
  public static void ensureLookAndFeelFileExists(IProject project) throws CoreException {
    // IDE-110 IDE-648
    final IWebProject lrProject = LiferayCore.create(IWebProject.class, project);

    if (lrProject == null) {
      return;
    }

    IFile lookAndFeelFile = null;

    final IResource res =
        lrProject.findDocrootResource(
            new Path("WEB-INF/" + ILiferayConstants.LIFERAY_LOOK_AND_FEEL_XML_FILE));

    if (res instanceof IFile && res.exists()) {
      lookAndFeelFile = (IFile) res;
    }

    if (lookAndFeelFile == null) {
      // need to generate a new lnf file in deafult docroot
      String id =
          project.getName().replaceAll(ISDKConstants.THEME_PLUGIN_PROJECT_SUFFIX, StringPool.EMPTY);

      final IResource propertiesFileRes =
          lrProject.findDocrootResource(
              new Path("WEB-INF/" + ILiferayConstants.LIFERAY_PLUGIN_PACKAGE_PROPERTIES_FILE));
      String name = id;

      if (propertiesFileRes instanceof IFile && propertiesFileRes.exists()) {
        Properties props = new Properties();

        try {
          final IFile propsFile = (IFile) propertiesFileRes;
          final InputStream contents = propsFile.getContents();

          props.load(contents);
          contents.close();

          final String nameValue = props.getProperty("name"); // $NON-NLS-1$

          if (!CoreUtil.isNullOrEmpty(nameValue)) {
            name = nameValue;
          }

          final ThemeDescriptorHelper themeDescriptorHelper = new ThemeDescriptorHelper(project);

          final ILiferayProject lProject = lrProject;
          final ILiferayPortal portal = lProject.adapt(ILiferayPortal.class);
          String version = "6.2.0";

          if (portal != null) {
            version = portal.getVersion();
          }

          final String themeType = lProject.getProperty("theme.type", "vm");

          themeDescriptorHelper.createDefaultFile(
              lrProject.getDefaultDocrootFolder().getFolder("WEB-INF"),
              version,
              id,
              name,
              themeType);
        } catch (IOException e) {
          ThemeCore.logError("Unable to load plugin package properties.", e); // $NON-NLS-1$
        }
      }
    }
  }