blob: 5ebfbe14314550e1331ca6ee2cb0c02d0cb6eaaa [file] [log] [blame]
/*
* Copyright 2000-2009 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.openapi.components;
import com.intellij.openapi.extensions.PluginDescriptor;
import com.intellij.openapi.extensions.PluginId;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.util.xmlb.annotations.MapAnnotation;
import com.intellij.util.xmlb.annotations.Property;
import com.intellij.util.xmlb.annotations.Transient;
import java.util.HashMap;
import java.util.Map;
public class ComponentConfig {
public static final ComponentConfig[] EMPTY_ARRAY = new ComponentConfig[0];
protected String implementationClass;
protected String interfaceClass;
protected String headlessImplementationClass;
protected boolean loadForDefaultProject;
@Property(surroundWithTag = false)
@MapAnnotation(surroundWithTag = false, entryTagName = "option", keyAttributeName = "name", valueAttributeName = "value")
public Map<String,String> options = new HashMap<String, String>();
@Transient
public PluginDescriptor pluginDescriptor;
@Transient
public ClassLoader getClassLoader() {
return pluginDescriptor != null ? pluginDescriptor.getPluginClassLoader() : getClass().getClassLoader();
}
@Transient
public PluginId getPluginId() {
return pluginDescriptor == null ? null : pluginDescriptor.getPluginId();
}
public String getImplementationClass() {
return implementationClass;
}
public String getInterfaceClass() {
return interfaceClass;
}
@SuppressWarnings("UnusedDeclaration")
public String getHeadlessImplementationClass() {
return headlessImplementationClass;
}
public boolean isLoadForDefaultProject() {
return loadForDefaultProject;
}
/**
* @param headless
* @return false if the component should not be loaded in headless mode
*/
public boolean prepareClasses(boolean headless) {
if (headless && headlessImplementationClass != null) {
if (StringUtil.isEmpty(headlessImplementationClass)) return false;
setImplementationClass(headlessImplementationClass);
}
if (StringUtil.isEmpty(interfaceClass)) {
setInterfaceClass(implementationClass);
}
return true;
}
public void setImplementationClass(String implementationClass) {
this.implementationClass = implementationClass == null ? null : implementationClass.trim();
}
public void setInterfaceClass(String interfaceClass) {
this.interfaceClass = interfaceClass == null ? null : interfaceClass.trim();
}
public void setHeadlessImplementationClass(String headlessImplementationClass) {
headlessImplementationClass = headlessImplementationClass == null ? null : headlessImplementationClass.trim();
this.headlessImplementationClass = headlessImplementationClass == null ? null : StringUtil.isEmpty(headlessImplementationClass) ? "" : headlessImplementationClass;
}
public void setLoadForDefaultProject(boolean loadForDefaultProject) {
this.loadForDefaultProject = loadForDefaultProject;
}
}