com.liferay.ide.portlet.ui.util.NodeUtils.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.ide.portlet.ui.util.NodeUtils.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.portlet.ui.util;

import com.liferay.ide.core.properties.PropertiesFileLookup;
import com.liferay.ide.core.properties.PropertiesFileLookup.KeyInfo;
import com.liferay.ide.core.util.CoreUtil;
import com.liferay.ide.core.util.PropertiesUtil;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jface.text.IDocument;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode;
import org.eclipse.wst.xml.search.core.util.DOMUtils;
import org.w3c.dom.Node;

/**
 * @author Gregory Amerson
 */
@SuppressWarnings("restriction")
public class NodeUtils {
    public static MessageKey[] findMessageKeys(IDocument document, String key, boolean loadValues) {
        MessageKey[] retval = null;

        final IFile file = DOMUtils.getFile(document);

        if (file != null && file.exists()) {
            final IJavaProject project = JavaCore.create(file.getProject());

            if (project != null && project.exists()) {
                final List<MessageKey> keys = new ArrayList<MessageKey>();

                for (final IFolder src : CoreUtil.getSourceFolders(project)) {
                    if (src.exists()) {
                        final IFile[] props = PropertiesUtil.visitPropertiesFiles(src, ".*");

                        for (final IFile prop : props) {
                            try {
                                final KeyInfo info = new PropertiesFileLookup(prop.getContents(), key, loadValues)
                                        .getKeyInfo(key);

                                if (info != null && info.offset >= 0) {
                                    keys.add(new MessageKey(prop, key, info.offset, info.length, info.value));
                                }
                            } catch (CoreException e) {
                            }
                        }
                    }
                }

                retval = keys.toArray(new MessageKey[0]);
            }
        }

        return retval;
    }

    public static Node getMessageKey(IDOMNode currentNode) {
        Node retval = null;

        final boolean messageNode = currentNode != null && currentNode.getNodeName() != null
                && currentNode.getNodeType() == Node.ELEMENT_NODE && (currentNode.getNodeName().endsWith("message")
                        || currentNode.getNodeName().endsWith("error") || isAuiLabel(currentNode));

        if (messageNode) {
            final Node key = currentNode.getAttributes().getNamedItem("key");

            if (key != null && (!CoreUtil.isNullOrEmpty(key.getNodeValue()))) {
                retval = key;
            } else {
                final Node label = currentNode.getAttributes().getNamedItem("label");

                if (label != null && (!CoreUtil.isNullOrEmpty(label.getNodeValue()))) {
                    retval = label;
                }
            }
        }

        return retval;
    }

    private static boolean isAuiLabel(IDOMNode currentNode) {
        return currentNode.getNodeName().startsWith("aui:")
                && currentNode.getAttributes().getNamedItem("label") != null;
    }
}