From b8024352d18695471a7ce69cca5f26cb63e8d579 Mon Sep 17 00:00:00 2001 From: Doug Schaefer Date: Fri, 25 Apr 2003 14:32:51 +0000 Subject: [PATCH] New Build Model - Save and load options values --- .../core/build/managed/Configuration.java | 12 + .../internal/core/build/managed/Option.java | 23 + .../core/build/managed/OptionReference.java | 48 +- .../core/build/managed/ToolReference.java | 17 + .../schema/ManagedBuildTools.exsd | 673 +++++++++--------- .../build/managed/tests/AllBuildTests.java | 53 +- core/org.eclipse.cdt.ui.tests/plugin.xml | 19 +- 7 files changed, 502 insertions(+), 343 deletions(-) diff --git a/core/org.eclipse.cdt.core/build/org/eclipse/cdt/internal/core/build/managed/Configuration.java b/core/org.eclipse.cdt.core/build/org/eclipse/cdt/internal/core/build/managed/Configuration.java index 6ed0d47ee61..7538a4e9e7a 100644 --- a/core/org.eclipse.cdt.core/build/org/eclipse/cdt/internal/core/build/managed/Configuration.java +++ b/core/org.eclipse.cdt.core/build/org/eclipse/cdt/internal/core/build/managed/Configuration.java @@ -22,6 +22,8 @@ import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IConfigurationElement; import org.w3c.dom.Document; import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; /** * @@ -88,6 +90,15 @@ public class Configuration extends BuildObject implements IConfiguration { if (element.hasAttribute("parent")) parent = target.getParent().getConfiguration(element.getAttribute("parent")); + + NodeList configElements = element.getChildNodes(); + for (int i = 0; i < configElements.getLength(); ++i) { + Node configElement = configElements.item(i); + if (configElement.getNodeName().equals("toolRef")) { + new ToolReference(this, (Element)configElement); + } + } + } public void serealize(Document doc, Element element) { @@ -103,6 +114,7 @@ public class Configuration extends BuildObject implements IConfiguration { for (int i = 0; i < toolReferences.size(); ++i) { ToolReference toolRef = (ToolReference)toolReferences.get(i); Element toolRefElement = doc.createElement("toolRef"); + element.appendChild(toolRefElement); toolRef.serealize(doc, toolRefElement); } } diff --git a/core/org.eclipse.cdt.core/build/org/eclipse/cdt/internal/core/build/managed/Option.java b/core/org.eclipse.cdt.core/build/org/eclipse/cdt/internal/core/build/managed/Option.java index e444c505526..ecb36ff2cc1 100644 --- a/core/org.eclipse.cdt.core/build/org/eclipse/cdt/internal/core/build/managed/Option.java +++ b/core/org.eclipse.cdt.core/build/org/eclipse/cdt/internal/core/build/managed/Option.java @@ -10,6 +10,7 @@ **********************************************************************/ package org.eclipse.cdt.internal.core.build.managed; +import java.util.ArrayList; import java.util.List; import org.eclipse.cdt.core.build.managed.BuildException; @@ -53,6 +54,28 @@ public class Option extends BuildObject implements IOption { String categoryId = element.getAttribute("category"); if (categoryId != null) setCategory(tool.getOptionCategory(categoryId)); + + // valueType + String valueTypeStr = element.getAttribute("valueType"); + if (valueTypeStr == null || valueTypeStr.equals("string")) + valueType = IOption.STRING; + else if (valueTypeStr.equals("stringList")) + valueType = IOption.STRING_LIST; + + // value + switch (valueType) { + case IOption.STRING: + value = element.getAttribute("value"); + break; + case IOption.STRING_LIST: + List valueList = new ArrayList(); + value = valueList; + IConfigurationElement[] valueElements = element.getChildren("optionValue"); + for (int i = 0; i < valueElements.length; ++i) { + valueList.add(valueElements[i].getAttribute("value")); + } + break; + } } /* (non-Javadoc) diff --git a/core/org.eclipse.cdt.core/build/org/eclipse/cdt/internal/core/build/managed/OptionReference.java b/core/org.eclipse.cdt.core/build/org/eclipse/cdt/internal/core/build/managed/OptionReference.java index cfbb3f8c9e5..d02eb34e688 100644 --- a/core/org.eclipse.cdt.core/build/org/eclipse/cdt/internal/core/build/managed/OptionReference.java +++ b/core/org.eclipse.cdt.core/build/org/eclipse/cdt/internal/core/build/managed/OptionReference.java @@ -10,6 +10,9 @@ **********************************************************************/ package org.eclipse.cdt.internal.core.build.managed; +import java.util.ArrayList; +import java.util.List; + import org.eclipse.cdt.core.build.managed.BuildException; import org.eclipse.cdt.core.build.managed.IOption; import org.eclipse.cdt.core.build.managed.IOptionCategory; @@ -17,6 +20,7 @@ import org.eclipse.cdt.core.build.managed.ITool; import org.eclipse.core.runtime.IConfigurationElement; import org.w3c.dom.Document; import org.w3c.dom.Element; +import org.w3c.dom.NodeList; /** * @@ -51,6 +55,20 @@ public class OptionReference implements IOption { option = owner.getTool().getOption(element.getAttribute("id")); owner.addOptionReference(this); + + // value + switch (option.getValueType()) { + case IOption.STRING: + value = element.getAttribute("value"); + break; + case IOption.STRING_LIST: + List valueList = new ArrayList(); + IConfigurationElement[] valueElements = element.getChildren("optionValue"); + for (int i = 0; i < valueElements.length; ++i) { + valueList.add(valueElements[i].getAttribute("value")); + } + break; + } } /** @@ -64,6 +82,21 @@ public class OptionReference implements IOption { option = owner.getTool().getOption(element.getAttribute("id")); owner.addOptionReference(this); + + // value + switch (option.getValueType()) { + case IOption.STRING: + value = element.getAttribute("value"); + break; + case IOption.STRING_LIST: + List valueList = new ArrayList(); + NodeList nodes = element.getElementsByTagName("optionValue"); + for (int i = 0; i < nodes.getLength(); ++i) { + valueList.add(((Element)nodes.item(i)).getAttribute("value")); + } + break; + } + } /** @@ -74,7 +107,20 @@ public class OptionReference implements IOption { */ public void serealize(Document doc, Element element) { element.setAttribute("id", option.getId()); - option = owner.getOption(element.getAttribute("id")); + + // value + switch (option.getValueType()) { + case IOption.STRING: + element.setAttribute("value", (String)value); + break; + case IOption.STRING_LIST: + List valueList = (List)value; + for (int i = 0; i < valueList.size(); ++i) { + Element valueElement = doc.createElement("optionValue"); + valueElement.setAttribute("value", (String)valueList.get(i)); + element.appendChild(valueElement); + } + } } /* (non-Javadoc) diff --git a/core/org.eclipse.cdt.core/build/org/eclipse/cdt/internal/core/build/managed/ToolReference.java b/core/org.eclipse.cdt.core/build/org/eclipse/cdt/internal/core/build/managed/ToolReference.java index ff1efc8761f..ff77920d260 100644 --- a/core/org.eclipse.cdt.core/build/org/eclipse/cdt/internal/core/build/managed/ToolReference.java +++ b/core/org.eclipse.cdt.core/build/org/eclipse/cdt/internal/core/build/managed/ToolReference.java @@ -22,6 +22,8 @@ import org.eclipse.cdt.core.build.managed.ITool; import org.eclipse.core.runtime.IConfigurationElement; import org.w3c.dom.Document; import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; /** * @@ -69,6 +71,20 @@ public class ToolReference implements ITool { } public ToolReference(Configuration owner, Element element) { + this.owner = owner; + + Target parentTarget = (Target)owner.getTarget(); + parent = ((Target)parentTarget.getParent()).getTool(element.getAttribute("id")); + + owner.addToolReference(this); + + NodeList configElements = element.getChildNodes(); + for (int i = 0; i < configElements.getLength(); ++i) { + Node configElement = configElements.item(i); + if (configElement.getNodeName().equals("optionRef")) { + new OptionReference(this, (Element)configElement); + } + } } public void serealize(Document doc, Element element) { @@ -78,6 +94,7 @@ public class ToolReference implements ITool { for (int i = 0; i < optionReferences.size(); ++i) { OptionReference optionRef = (OptionReference)optionReferences.get(i); Element optionRefElement = doc.createElement("optionRef"); + element.appendChild(optionRefElement); optionRef.serealize(doc, optionRefElement); } } diff --git a/core/org.eclipse.cdt.core/schema/ManagedBuildTools.exsd b/core/org.eclipse.cdt.core/schema/ManagedBuildTools.exsd index 3f80815b64b..dc77d15fc5f 100644 --- a/core/org.eclipse.cdt.core/schema/ManagedBuildTools.exsd +++ b/core/org.eclipse.cdt.core/schema/ManagedBuildTools.exsd @@ -1,330 +1,343 @@ - - - - - - - - - [Enter description of this extension point.] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - This is the id of the option category for this option. The id can be the id of the tool which is also a category. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Represents a type of resource that is the target of the build process, for example, a Linux Library. A target contains a sequence of tool definitions and configurations. Targets are arranged in an inheritance hierarchy where a target inherits the list of tools from it's parent and can add to or override tools in this list. - - - - - - - - - - - - - - - - - - - - - - - - - This is a UI property. If set to true, users should not be able to create project configurations targeted at this target. - - - - - - - The id of a target that this tool inherits from. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [Enter the first release in which this extension point appears.] - - - - - - - - - [Enter extension point usage example here.] - - - - - - - - - [Enter API information here.] - - - - - - - - - [Enter information about supplied implementation of this extension point.] - - - - - - - - - - - - - + + + + + + + + + [Enter description of this extension point.] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This is the id of the option category for this option. The id can be the id of the tool which is also a category. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Represents a type of resource that is the target of the build process, for example, a Linux Library. A target contains a sequence of tool definitions and configurations. Targets are arranged in an inheritance hierarchy where a target inherits the list of tools from it's parent and can add to or override tools in this list. + + + + + + + + + + + + + + + + + + + + + + + + + This is a UI property. If set to true, users should not be able to create project configurations targeted at this target. + + + + + + + The id of a target that this tool inherits from. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [Enter the first release in which this extension point appears.] + + + + + + + + + [Enter extension point usage example here.] + + + + + + + + + [Enter API information here.] + + + + + + + + + [Enter information about supplied implementation of this extension point.] + + + + + + + + + + + + + diff --git a/core/org.eclipse.cdt.ui.tests/build/org/eclipse/cdt/core/build/managed/tests/AllBuildTests.java b/core/org.eclipse.cdt.ui.tests/build/org/eclipse/cdt/core/build/managed/tests/AllBuildTests.java index 30429829b10..ce22ea79206 100644 --- a/core/org.eclipse.cdt.ui.tests/build/org/eclipse/cdt/core/build/managed/tests/AllBuildTests.java +++ b/core/org.eclipse.cdt.ui.tests/build/org/eclipse/cdt/core/build/managed/tests/AllBuildTests.java @@ -54,7 +54,7 @@ public class AllBuildTests extends TestCase { * Navigates through the build info as defined in the extensions * defined in this plugin */ - public void testExtensions() { + public void testExtensions() throws Exception { ITarget testRoot = null; ITarget testSub = null; @@ -67,7 +67,7 @@ public class AllBuildTests extends TestCase { if (target.getName().equals("Test Root")) { testRoot = target; - checkRootTarget(testRoot); + checkRootTarget(testRoot, "x"); } else if (target.getName().equals("Test Sub")) { testSub = target; @@ -123,7 +123,19 @@ public class AllBuildTests extends TestCase { for (int i = 0; i < configs.length; ++i) target.createConfiguration(configs[i], target.getId() + "." + i); - checkRootTarget(target); + checkRootTarget(target, "x"); + + // Override the "Option in Category" option value + configs = target.getConfigurations(); + ITool[] tools = configs[0].getTools(); + IOptionCategory topCategory = tools[0].getTopOptionCategory(); + IOptionCategory[] categories = topCategory.getChildCategories(); + IOption[] options = categories[0].getOptions(configs[0]); + configs[0].setOption(options[0], "z"); + options = categories[0].getOptions(null); + assertEquals("x", options[0].getStringValue()); + options = categories[0].getOptions(configs[0]); + assertEquals("z", options[0].getStringValue()); // Save, close, reopen and test again ManagedBuildManager.saveBuildInfo(project); @@ -133,7 +145,7 @@ public class AllBuildTests extends TestCase { targets = ManagedBuildManager.getTargets(project); assertEquals(1, targets.length); - checkRootTarget(targets[0]); + checkRootTarget(targets[0], "z"); } IProject createProject(String name) throws CoreException { @@ -154,7 +166,7 @@ public class AllBuildTests extends TestCase { return project; } - private void checkRootTarget(ITarget target) { + private void checkRootTarget(ITarget target, String oicValue) throws BuildException { // Tools ITool[] tools = target.getTools(); // Root Tool @@ -164,7 +176,11 @@ public class AllBuildTests extends TestCase { IOption[] options = rootTool.getOptions(); assertEquals(2, options.length); assertEquals("Option in Top", options[0].getName()); + String[] valueList = options[0].getStringListValue(); + assertEquals("a", valueList[0]); + assertEquals("b", valueList[1]); assertEquals("Option in Category", options[1].getName()); + assertEquals("x", options[1].getStringValue()); // Option Categories IOptionCategory topCategory = rootTool.getTopOptionCategory(); assertEquals("Root Tool", topCategory.getName()); @@ -187,11 +203,34 @@ public class AllBuildTests extends TestCase { tools = rootConfig.getTools(); assertEquals(1, tools.length); assertEquals("Root Tool", tools[0].getName()); + topCategory = tools[0].getTopOptionCategory(); + options = topCategory.getOptions(configs[0]); + assertEquals(1, options.length); + assertEquals("Option in Top", options[0].getName()); + valueList = options[0].getStringListValue(); + assertEquals("a", valueList[0]); + assertEquals("b", valueList[1]); + categories = topCategory.getChildCategories(); + options = categories[0].getOptions(configs[0]); + assertEquals("Option in Category", options[0].getName()); + assertEquals(oicValue, options[0].getStringValue()); // Root Override Config assertEquals("Root Override Config", configs[1].getName()); tools = configs[1].getTools(); + assertEquals(1, tools.length); assertTrue(tools[0] instanceof ToolReference); - options = tools[0].getOptions(); + assertEquals("Root Tool", tools[0].getName()); + topCategory = tools[0].getTopOptionCategory(); + options = topCategory.getOptions(configs[1]); + assertEquals(1, options.length); + assertEquals("Option in Top", options[0].getName()); + valueList = options[0].getStringListValue(); + assertEquals("a", valueList[0]); + assertEquals("b", valueList[1]); + categories = topCategory.getChildCategories(); + options = categories[0].getOptions(configs[1]); + assertEquals("Option in Category", options[0].getName()); + assertEquals("y", options[0].getStringValue()); } - + } diff --git a/core/org.eclipse.cdt.ui.tests/plugin.xml b/core/org.eclipse.cdt.ui.tests/plugin.xml index 463db3fa60e..9a6b943315d 100644 --- a/core/org.eclipse.cdt.ui.tests/plugin.xml +++ b/core/org.eclipse.cdt.ui.tests/plugin.xml @@ -42,14 +42,14 @@ @@ -106,11 +106,20 @@ @@ -124,8 +133,8 @@ + value="y" + id="childOption">