blob: f61a73f2ebc50f792d6e99a9508caca18fc74238 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012, 2013 Tasktop Technologies and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* https://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Tasktop Technologies - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.internal.tasks.core.util;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtension;
import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.core.runtime.IExtensionRegistry;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.MultiStatus;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
import org.eclipse.mylyn.commons.core.StatusHandler;
import org.eclipse.mylyn.internal.tasks.core.ITasksCoreConstants;
import org.eclipse.mylyn.internal.tasks.core.RepositoryTemplateManager;
import org.eclipse.mylyn.tasks.core.IRepositoryManager;
import org.eclipse.mylyn.tasks.core.RepositoryTemplate;
import org.eclipse.osgi.util.NLS;
/**
* @author Mik Kersten
* @author Shawn Minto
* @author Rob Elves
*/
public class RepositoryTemplateExtensionReader {
public static final String EXTENSION_TEMPLATES = "org.eclipse.mylyn.tasks.core.templates"; //$NON-NLS-1$
public static final String EXTENSION_TMPL_REPOSITORY = "repository"; //$NON-NLS-1$
public static final String ELMNT_TMPL_LABEL = "label"; //$NON-NLS-1$
public static final String ELMNT_TMPL_URLREPOSITORY = "urlRepository"; //$NON-NLS-1$
public static final String ELMNT_TMPL_REPOSITORYKIND = "repositoryKind"; //$NON-NLS-1$
public static final String ELMNT_TMPL_CHARACTERENCODING = "characterEncoding"; //$NON-NLS-1$
public static final String ELMNT_TMPL_ANONYMOUS = "anonymous"; //$NON-NLS-1$
public static final String ELMNT_TMPL_VERSION = "version"; //$NON-NLS-1$
public static final String ELMNT_TMPL_URLNEWTASK = "urlNewTask"; //$NON-NLS-1$
public static final String ELMNT_TMPL_URLTASK = "urlTask"; //$NON-NLS-1$
public static final String ELMNT_TMPL_URLTASKQUERY = "urlTaskQuery"; //$NON-NLS-1$
public static final String ELMNT_TMPL_NEWACCOUNTURL = "urlNewAccount"; //$NON-NLS-1$
public static final String ELMNT_TMPL_ADDAUTO = "addAutomatically"; //$NON-NLS-1$
private final IRepositoryManager repositoryManager;
private final RepositoryTemplateManager templateManager;
public RepositoryTemplateExtensionReader(IRepositoryManager repositoryManager,
RepositoryTemplateManager templateManager) {
this.repositoryManager = repositoryManager;
this.templateManager = templateManager;
}
public void loadExtensions(ContributorBlackList blackList) {
MultiStatus result = new MultiStatus(ITasksCoreConstants.ID_PLUGIN, 0,
"Unexpected error while loading repository template extensions", null); //$NON-NLS-1$
IExtensionRegistry registry = Platform.getExtensionRegistry();
IExtensionPoint templatesExtensionPoint = registry.getExtensionPoint(EXTENSION_TEMPLATES);
IExtension[] templateExtensions = templatesExtensionPoint.getExtensions();
for (IExtension templateExtension : templateExtensions) {
IConfigurationElement[] elements = templateExtension.getConfigurationElements();
for (IConfigurationElement element : elements) {
if (!blackList.isDisabled(element)) {
if (element.getName().equals(EXTENSION_TMPL_REPOSITORY)) {
IStatus status = readRepositoryTemplate(element);
if (!status.isOK()) {
result.add(status);
}
}
}
}
}
if (!result.isOK()) {
StatusHandler.log(result);
}
}
private IStatus readRepositoryTemplate(IConfigurationElement element) {
String label = element.getAttribute(ELMNT_TMPL_LABEL);
String serverUrl = element.getAttribute(ELMNT_TMPL_URLREPOSITORY);
String repKind = element.getAttribute(ELMNT_TMPL_REPOSITORYKIND);
String version = element.getAttribute(ELMNT_TMPL_VERSION);
String newTaskUrl = element.getAttribute(ELMNT_TMPL_URLNEWTASK);
String taskPrefix = element.getAttribute(ELMNT_TMPL_URLTASK);
String taskQueryUrl = element.getAttribute(ELMNT_TMPL_URLTASKQUERY);
String newAccountUrl = element.getAttribute(ELMNT_TMPL_NEWACCOUNTURL);
String encoding = element.getAttribute(ELMNT_TMPL_CHARACTERENCODING);
boolean addAuto = Boolean.parseBoolean(element.getAttribute(ELMNT_TMPL_ADDAUTO));
boolean anonymous = Boolean.parseBoolean(element.getAttribute(ELMNT_TMPL_ANONYMOUS));
if (serverUrl != null && label != null && repKind != null
&& repositoryManager.getRepositoryConnector(repKind) != null) {
RepositoryTemplate template = new RepositoryTemplate(label, serverUrl, encoding, version, newTaskUrl,
taskPrefix, taskQueryUrl, newAccountUrl, anonymous, addAuto);
for (IConfigurationElement configElement : element.getChildren()) {
String name = configElement.getAttribute("name"); //$NON-NLS-1$
String value = configElement.getAttribute("value"); //$NON-NLS-1$
if (name != null && name.length() > 0 && value != null) {
template.addAttribute(name, value);
}
}
templateManager.addTemplate(repKind, template);
return Status.OK_STATUS;
} else {
return new Status(
IStatus.ERROR,
ITasksCoreConstants.ID_PLUGIN,
NLS.bind(
"Could not load repository template extension contributed by ''{0}'' with connectorKind ''{1}''", element.getNamespaceIdentifier(), repKind)); //$NON-NLS-1$
}
}
}