Java tutorial
/******************************************************************************* * 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) { } } } } }