1 /*******************************************************************************
2 * Copyright (c) 2008 IBM Corporation and others.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
9 * IBM Corporation - initial API and implementation
10 *******************************************************************************/
11 package org.eclipse.cdt.internal.ui.wizards.settingswizards;
14 import java.util.ArrayList;
15 import java.util.List;
17 import org.eclipse.swt.graphics.Image;
18 import org.w3c.dom.Element;
19 import org.w3c.dom.Node;
20 import org.w3c.dom.NodeList;
21 import org.w3c.dom.Text;
22 import org.xml.sax.ContentHandler;
23 import org.xml.sax.SAXException;
25 import org.eclipse.cdt.core.settings.model.CMacroEntry;
26 import org.eclipse.cdt.core.settings.model.ICLanguageSetting;
27 import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry;
28 import org.eclipse.cdt.core.settings.model.ICSettingEntry;
29 import org.eclipse.cdt.ui.CDTSharedImages;
30 import org.eclipse.cdt.ui.CUIPlugin;
33 * A settings processor that imports and exports symbols.
39 public class MacroSettingsProcessor extends SettingsProcessor {
41 public static final String SECTION_NAME = "org.eclipse.cdt.internal.ui.wizards.settingswizards.Macros"; //$NON-NLS-1$
43 private static final String MACRO_ELEMENT = "macro"; //$NON-NLS-1$
44 private static final String NAME_ELEMENT = "name"; //$NON-NLS-1$
45 private static final String VALUE_ELEMENT = "value"; //$NON-NLS-1$
48 public Image getIcon() {
49 return CUIPlugin.getImageDescriptorRegistry().get(CDTSharedImages.getImageDescriptor(CDTSharedImages.IMG_OBJS_MACRO));
52 public String getDisplayName() {
53 return Messages.ProjectSettingsWizardPage_Processor_Macros;
56 public String getSectionName() {
61 protected int getSettingsType() {
62 return ICSettingEntry.MACRO;
66 protected void writeSettings(ContentHandler content, ICLanguageSettingEntry setting) throws SettingsImportExportException {
67 char[] name = setting.getName().toCharArray();
68 char[] value = setting.getValue().toCharArray();
71 content.startElement(NONE, NONE, MACRO_ELEMENT, null);
74 content.startElement(NONE, NONE, NAME_ELEMENT, null);
75 content.characters(name, 0, name.length);
76 content.endElement(NONE, NONE, NAME_ELEMENT);
78 content.startElement(NONE, NONE, VALUE_ELEMENT, null);
79 content.characters(value, 0, value.length);
80 content.endElement(NONE, NONE, VALUE_ELEMENT);
83 content.endElement(NONE, NONE, MACRO_ELEMENT);
86 } catch(SAXException e) {
87 throw new SettingsImportExportException(e);
93 protected void readSettings(ICLanguageSetting setting, Element language) throws SettingsImportExportException {
94 List<ICLanguageSettingEntry> macros = new ArrayList<ICLanguageSettingEntry>();
96 List<Element> macrosNodes = XMLUtils.extractChildElements(language, MACRO_ELEMENT);
98 for(Element macroElement : macrosNodes) {
102 NodeList nodeList = macroElement.getChildNodes();
103 for(int i = 0; i < nodeList.getLength(); i++) {
104 Node node = nodeList.item(i);
105 switch(node.getNodeType()) {
107 Text text = (Text)node;
108 if(XMLUtils.isWhitespace(text.getData()))
110 throw new SettingsImportExportException("Unknown text: '" + text.getData() + "'"); //$NON-NLS-1$ //$NON-NLS-2$
111 case Node.ELEMENT_NODE:
112 Element element = (Element)node;
113 String tagName = element.getTagName();
114 if(name == null && tagName.equals(NAME_ELEMENT))
115 name = element.getTextContent();
116 else if(value == null && tagName.equals(VALUE_ELEMENT))
117 value = element.getTextContent();
119 throw new SettingsImportExportException("Unknown or extra tag: " + tagName); //$NON-NLS-1$
122 throw new SettingsImportExportException("Unknown node: " + node.getNodeName()); //$NON-NLS-1$
127 throw new SettingsImportExportException("There must be one <name> element"); //$NON-NLS-1$
129 throw new SettingsImportExportException("There must be one <value> element"); //$NON-NLS-1$
131 macros.add(new CMacroEntry(name, value, 0));
137 // need to do this or existing settings will disappear
138 macros.addAll(setting.getSettingEntriesList(ICLanguageSettingEntry.MACRO));
139 setting.setSettingEntries(ICSettingEntry.MACRO, macros);