package ariba.ideplugin.idea;
import com.intellij.openapi.components.ApplicationComponent;
import com.intellij.openapi.fileTypes.FileTypeManager;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.codeInsight.template.Template;
import com.intellij.codeInsight.template.impl.TemplateImpl;
import com.intellij.codeInsight.template.impl.TemplateSettings;
import com.intellij.openapi.util.DefaultJDOMExternalizer;
import com.intellij.openapi.util.InvalidDataException;
import com.intellij.codeInsight.template.impl.TemplateContext;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import java.io.InputStream;
public class AppComponent implements ApplicationComponent
{
public AppComponent ()
{
}
public void initComponent()
{
// auto-associate .awl files as htm if not otherwise mapped
FileType awlType = FileTypeManager.getInstance().getFileTypeByExtension("awl");
if (awlType.getName().endsWith("UnknownFileType") || awlType.getName().equals("UNKNOWN")) {
FileType htmType = FileTypeManager.getInstance().getFileTypeByExtension("htm");
FileTypeManager.getInstance().registerFileType(htmType, new String[] {"awl"});
}
// auto-associate .oss files as text if not otherwise mapped
FileType ossType = FileTypeManager.getInstance().getFileTypeByExtension("oss");
if (ossType.getName().endsWith("UnknownFileType") || ossType.getName().equals("UNKNOWN")) {
FileType txtType = FileTypeManager.getInstance().getFileTypeByExtension("txt");
FileTypeManager.getInstance().registerFileType(txtType, new String[] {"oss"});
}
// Load our bundled live templates
InputStream is = getClass().getResourceAsStream("/ariba/ideplugin/idea/livetemplates.xml");
if (is != null) {
loadTemplates(is, "AribaWeb");
}
}
public void disposeComponent()
{
}
public String getComponentName() {
return "AribaWebApplicationComponent";
}
void loadTemplates (InputStream inputStream, final String templateName) {
final SAXBuilder parser = new SAXBuilder();
try {
TemplateSettings templateSettings = TemplateSettings.getInstance();
Document doc = parser.build(inputStream);
Element root = doc.getRootElement();
for (Object element : root.getChildren()) {
if (element instanceof Element) {
final Template template = readExternal((Element) element, templateName);
final String key = template.getKey();
// Only add if not present
if (key != null && templateSettings.getTemplate(key) == null) {
templateSettings.addTemplate(template);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
protected Template readExternal (Element element, final String templateName) {
TemplateImpl template = new TemplateImpl(element.getAttributeValue("name"),
element.getAttributeValue("value"),
templateName);
template.setDescription(element.getAttributeValue("description"));
template.setToReformat(Boolean.valueOf(element.getAttributeValue("toReformat")));
template.setToShortenLongNames(Boolean.valueOf(element.getAttributeValue("toShortenFQNames")));
TemplateContext context = template.getTemplateContext();
for (Object o : element.getChildren("variable")) {
Element e = (Element) o;
template.addVariable(e.getAttributeValue("name"),
e.getAttributeValue("expression"),
e.getAttributeValue("defaultValue"),
Boolean.valueOf(e.getAttributeValue("alwaysStopAt")));
}
Element contextElement = element.getChild("context");
if (contextElement != null) {
try {
DefaultJDOMExternalizer.readExternal(context, contextElement);
} catch (InvalidDataException e) {
e.printStackTrace();
}
}
return template;
}
}