blob: 85df73f1b339df5d5ed88bad2025de40ce733110 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2008 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ui.internal.texteditor.rulers;
import java.net.URL;
import com.ibm.icu.text.MessageFormat;
import org.osgi.framework.Bundle;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtension;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.InvalidRegistryObjectException;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
import org.eclipse.ui.internal.texteditor.TextEditorPlugin;
public final class ExtensionPointHelper {
private final IConfigurationElement fElement;
private final String fName;
public ExtensionPointHelper(IConfigurationElement element) throws InvalidRegistryObjectException {
Assert.isLegal(element != null);
fElement= element;
fName= element.getName();
// see if we have a conventional 'id' attribute
}
public String getDefaultAttribute(String attribute, String dflt) throws InvalidRegistryObjectException {
String value= fElement.getAttribute(attribute);
return value == null ? dflt : value;
}
public String getNonNullAttribute(String attribute) throws InvalidRegistryObjectException, CoreException {
String value= fElement.getAttribute(attribute);
if (value == null)
fail(MessageFormat.format(RulerColumnMessages.ExtensionPointHelper_missing_attribute_msg, fName, attribute));
return value;
}
public float getDefaultAttribute(String attribute, float dflt) throws CoreException {
String value= getDefaultAttribute(attribute, null);
if (value == null)
return dflt;
try {
return Float.valueOf(value).floatValue();
} catch (NumberFormatException x) {
fail(MessageFormat.format(RulerColumnMessages.ExtensionPointHelper_invalid_number_attribute_msg, attribute,
fName));
return dflt;
}
}
public boolean getDefaultAttribute(String attribute, boolean dflt) throws CoreException {
String value= getDefaultAttribute(attribute, null);
if (value == null)
return dflt;
try {
return Boolean.parseBoolean(value);
} catch (NumberFormatException x) {
fail(MessageFormat.format(RulerColumnMessages.ExtensionPointHelper_invalid_number_attribute_msg, fName,
attribute));
return dflt;
}
}
public void fail(String message) throws CoreException {
String id= findId(fElement);
String extensionPointId= fElement.getDeclaringExtension().getExtensionPointUniqueIdentifier();
Object[] args= { fElement.getContributor().getName(), id, extensionPointId };
String blame= MessageFormat.format(RulerColumnMessages.ExtensionPointHelper_invalid_contribution_msg, args);
IStatus status= new Status(IStatus.WARNING, TextEditorPlugin.PLUGIN_ID, IStatus.OK, blame + message, null);
throw new CoreException(status);
}
public static String findId(IConfigurationElement element) {
String id= null;
while (element != null) {
id= element.getAttribute("id"); //$NON-NLS-1$
if (id != null)
break;
Object parent= element.getParent();
if (parent instanceof IExtension) {
id= ((IExtension) parent).getUniqueIdentifier();
break;
} else if (parent instanceof IConfigurationElement) {
element= (IConfigurationElement) parent;
} else {
break;
}
}
return id == null ? "<unknown>" : id; //$NON-NLS-1$
}
public URL getDefaultResourceURL(String attribute, URL dflt) {
String value= getDefaultAttribute(attribute, null);
if (value == null)
return dflt;
Bundle bundle= getBundle();
if (bundle == null)
return dflt;
Path path= new Path(value);
return FileLocator.find(bundle, path, null);
}
private Bundle getBundle() {
String namespace= fElement.getDeclaringExtension().getContributor().getName();
Bundle bundle= Platform.getBundle(namespace);
return bundle;
}
}