com.liferay.ide.xml.search.ui.AddResourceKeyMarkerResolution.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.ide.xml.search.ui.AddResourceKeyMarkerResolution.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.xml.search.ui;

import com.liferay.ide.core.util.CoreUtil;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Properties;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.graphics.Image;

/**
 * @author Terry Jia
 */
public class AddResourceKeyMarkerResolution extends AbstractResourceBundleMarkerResolution {

    private IFile resourceBundle = null;

    public AddResourceKeyMarkerResolution(IMarker marker, IFile languageFile) {
        super(marker);

        this.resourceBundle = languageFile;
    }

    public String getLabel() {
        final StringBuffer sb = new StringBuffer();

        sb.append("Add missing key to ");
        sb.append(resourceBundle.getProjectRelativePath().toString());

        return sb.toString();
    }

    public Image getImage() {
        final URL url = LiferayXMLSearchUI.getDefault().getBundle().getEntry("/icons/resource-bundle.png");

        return ImageDescriptor.createFromURL(url).createImage();
    }

    protected void resolve(final IMarker marker) {
        final String message = marker.getAttribute(IMarker.MESSAGE, "");

        if ((message == null) || (resourceBundle == null)) {
            return;
        }

        InputStream is = null;

        try {
            is = resourceBundle.getContents();

            final String languageKey = getResourceKey(marker);

            if (CoreUtil.isNullOrEmpty(languageKey)) {
                return;
            }

            final Properties properties = new Properties();

            properties.load(is);

            if (properties.get(languageKey) != null) {
                return;
            }

            final String resourceValue = getDefaultResourceValue(languageKey);

            final String resourcePropertyLine = languageKey + "=" + resourceValue;

            final String contents = CoreUtil.readStreamToString(resourceBundle.getContents());

            final StringBuffer contentSb = new StringBuffer();

            contentSb.append(contents);

            if (!contents.endsWith("\n")) {
                contentSb.append("\n");
            }

            contentSb.append(resourcePropertyLine);

            byte[] bytes = contentSb.toString().trim().getBytes("UTF-8");

            int contentOffset = bytes.length;
            int resourcePropertyLineOffset = resourcePropertyLine.getBytes().length;

            resourceBundle.setContents(new ByteArrayInputStream(bytes), IResource.FORCE, new NullProgressMonitor());

            openEditor(resourceBundle, contentOffset - resourcePropertyLineOffset, contentOffset - 1);
        } catch (Exception e) {
            LiferayXMLSearchUI.logError(e);
        } finally {
            if (is != null) {
                try {
                    is.close();
                } catch (IOException e) {
                }
            }
        }
    }

}