com.liferay.ide.server.util.ComponentUtil.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.ide.server.util.ComponentUtil.java

Source

/*******************************************************************************
 * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
 *
 * This library is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License as published by the Free
 * Software Foundation; either version 2.1 of the License, or (at your option)
 * any later version.
 *
 * This library is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
 * details.
 *
 *******************************************************************************/
package com.liferay.ide.server.util;

import com.liferay.ide.core.IWebProject;
import com.liferay.ide.core.LiferayCore;
import com.liferay.ide.server.core.LiferayServerCore;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceVisitor;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.wst.common.componentcore.ComponentCore;
import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
import org.eclipse.wst.common.componentcore.resources.IVirtualResource;
import org.eclipse.wst.common.project.facet.core.IFacetedProject;
import org.eclipse.wst.common.project.facet.core.IProjectFacet;
import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
import org.eclipse.wst.server.core.model.IModuleResourceDelta;
import org.eclipse.wst.validation.internal.ValType;
import org.eclipse.wst.validation.internal.ValidationRunner;

/**
 * @author Gregory Amerson
 */
@SuppressWarnings("restriction")
public class ComponentUtil {
    public static boolean containsMember(IModuleResourceDelta delta, String[] paths) {
        if (delta == null) {
            return false;
        }

        // iterate over the path and find matching child delta
        IModuleResourceDelta[] currentChildren = delta.getAffectedChildren();

        if (currentChildren == null) {
            IFile file = (IFile) delta.getModuleResource().getAdapter(IFile.class);

            if (file != null) {
                String filePath = file.getFullPath().toString();

                for (String path : paths) {
                    if (filePath.contains(path)) {
                        return true;
                    }
                }
            }

            return false;
        }

        for (int j = 0, jmax = currentChildren.length; j < jmax; j++) {
            IPath moduleRelativePath = currentChildren[j].getModuleRelativePath();
            String moduleRelativePathValue = moduleRelativePath.toString();
            String moduleRelativeLastSegment = moduleRelativePath.lastSegment();

            for (String path : paths) {
                if (moduleRelativePathValue.equals(path) || moduleRelativeLastSegment.equals(path)) {
                    return true;
                }
            }

            boolean childContains = containsMember(currentChildren[j], paths);

            if (childContains) {
                return true;
            }
        }

        return false;
    }

    public static IFile findServiceJarForContext(String context) {
        IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();

        for (IProject project : projects) {
            if (project.getName().equals(context)) {
                final IWebProject lrproject = LiferayCore.create(IWebProject.class, project);

                if (lrproject != null) {
                    final IResource resource = lrproject
                            .findDocrootResource(new Path("WEB-INF/lib/" + project.getName() + "-service.jar"));

                    if (resource != null && resource.exists()) {
                        return (IFile) resource;
                    }
                }
            }
        }

        return null;
    }

    public static IFolder[] getSourceContainers(IProject project) {
        List<IFolder> sourceFolders = new ArrayList<IFolder>();

        IPackageFragmentRoot[] sources = getSources(project);

        for (IPackageFragmentRoot source : sources) {
            if (source.getResource() instanceof IFolder) {
                sourceFolders.add(((IFolder) source.getResource()));
            }
        }

        return sourceFolders.toArray(new IFolder[sourceFolders.size()]);
    }

    private static IPackageFragmentRoot[] getSources(IProject project) {
        IJavaProject jProject = JavaCore.create(project);

        if (jProject == null) {
            return new IPackageFragmentRoot[0];
        }

        List<IPackageFragmentRoot> list = new ArrayList<IPackageFragmentRoot>();
        IVirtualComponent vc = ComponentCore.createComponent(project);
        IPackageFragmentRoot[] roots;

        try {
            roots = jProject.getPackageFragmentRoots();

            for (int i = 0; i < roots.length; i++) {
                if (roots[i].getKind() != IPackageFragmentRoot.K_SOURCE) {
                    continue;
                }

                IResource resource = roots[i].getResource();

                if (null != resource) {
                    IVirtualResource[] vResources = ComponentCore.createResources(resource);
                    boolean found = false;

                    for (int j = 0; !found && j < vResources.length; j++) {
                        if (vResources[j].getComponent().equals(vc)) {
                            if (!list.contains(roots[i])) {
                                list.add(roots[i]);
                            }

                            found = true;
                        }
                    }
                }
            }

            if (list.size() == 0) {
                for (IPackageFragmentRoot root : roots) {
                    if (root.getKind() == IPackageFragmentRoot.K_SOURCE) {
                        if (!list.contains(root)) {
                            list.add(root);
                        }
                    }
                }
            }
        } catch (JavaModelException e) {
            LiferayServerCore.logError(e);
        }

        return list.toArray(new IPackageFragmentRoot[list.size()]);
    }

    public static boolean hasLiferayFacet(IProject project) {
        boolean retval = false;

        if (project == null) {
            return retval;
        }

        try {
            IFacetedProject facetedProject = ProjectFacetsManager.create(project);

            if (facetedProject != null) {
                for (IProjectFacetVersion facet : facetedProject.getProjectFacets()) {
                    IProjectFacet projectFacet = facet.getProjectFacet();

                    if (projectFacet.getId().startsWith("liferay")) //$NON-NLS-1$
                    {
                        retval = true;
                        break;
                    }
                }
            }
        } catch (Exception e) {
        }

        return retval;
    }

    public static void validateFile(IFile file, IProgressMonitor monitor) {
        try {
            ValidationRunner.validate(file, ValType.Manual, monitor, false);
        } catch (CoreException e) {
            LiferayServerCore.logError("Error while validating file: " + file.getFullPath(), e); //$NON-NLS-1$
        }
    }

    public static void validateFolder(IFolder folder, IProgressMonitor monitor) {
        try {
            Map<IProject, Set<IResource>> projects = new HashMap<IProject, Set<IResource>>();
            final Set<IResource> resources = new HashSet<IResource>();

            folder.accept(new IResourceVisitor() {
                public boolean visit(IResource resource) throws CoreException {
                    if (resource instanceof IFile || resource instanceof IFile) {
                        resources.add(resource);
                    }

                    return true;
                }
            });

            projects.put(folder.getProject(), resources);
            ValidationRunner.validate(projects, ValType.Manual, monitor, false);
        } catch (CoreException e) {
            LiferayServerCore.logError("Error while validating folder: " + folder.getFullPath(), e);
        }
    }
}