--- /dev/null
+import "OSGi"\r
+\r
+importJava "org.jdom2.Document" where\r
+ data Document\r
+ \r
+ @JavaName "<init>"\r
+ createDocument :: Element -> <Proc> Document\r
+ \r
+ @JavaName getRootElement\r
+ rootElementOf :: Document -> <Proc> Element\r
+ \r
+ @JavaName setRootElement\r
+ setRootElement :: Document -> Element -> <Proc> ()\r
+ \r
+importJava "org.jdom2.Element" where\r
+ data Element\r
+ \r
+ @JavaName "<init>"\r
+ createElement :: String -> <Proc> Element\r
+ \r
+ @JavaName getName\r
+ nameOf :: Element -> <Proc> String\r
+ \r
+ @JavaName getText\r
+ textOf :: Element -> <Proc> String\r
+ \r
+ @JavaName getParentElement\r
+ parentOf :: Element -> <Proc> Maybe Element\r
+ \r
+ @JavaName getChildren\r
+ childrenWithNameOf :: Element -> String -> <Proc> [Element]\r
+ \r
+ @JavaName getChildren\r
+ childrenOf :: Element -> <Proc> [Element]\r
+ \r
+ @JavaName getChild\r
+ childWithNameOf :: Element -> String -> <Proc> Maybe Element\r
+ \r
+ @JavaName getAttributeValue\r
+ attributeOf :: Element -> String -> <Proc> Maybe String\r
+ \r
+ @JavaName getAttributes\r
+ attributesOf :: Element -> <Proc> [Attribute]\r
+ \r
+ @JavaName addContent\r
+ addChild :: Element -> Element -> <Proc> ()\r
+ \r
+ setName :: Element -> String -> <Proc> ()\r
+ \r
+ setText :: Element -> String -> <Proc> ()\r
+ \r
+ setAttribute :: Element -> String -> String -> <Proc> ()\r
+ \r
+ @JavaName equals\r
+ equalsElement :: Element -> Element -> Boolean\r
+\r
+instance Eq Element where\r
+ (==) = equalsElement\r
+\r
+importJava "org.jdom2.Attribute" where\r
+ data Attribute\r
+ \r
+ @JavaName getValue\r
+ valueOfAttribute :: Attribute -> <Proc> String\r
+ \r
+ @JavaName getName\r
+ nameOfAttribute :: Attribute -> <Proc> String\r
+\r
+Element ?parentElement ?childName ?childElement :-\r
+ @ffb 1.0\r
+ ?childName = nameOf ?childElement\r
+ Optional ?parentElement (parentOf ?childElement)\r
+ \r
+ @bbf 10.0\r
+ ?childElement <- childrenWithNameOf ?parentElement ?childName\r
+\r
+ @bff 10.0\r
+ ?childElement <- childrenOf ?parentElement\r
+ ?childName = nameOf ?childElement\r
+ \r
+ @enforce\r
+ Execute (addNamedChild ?parentElement ?childName ?childElement)\r
+ \r
+Attribute ?element ?attributeName ?attributeValue :-\r
+ @bbf 0.95\r
+ Optional ?attributeValue (attributeOf ?element ?attributeName)\r
+\r
+ @bff 4.0\r
+ ?attribute <- attributesOf ?element\r
+ ?attributeName = nameOfAttribute ?attribute\r
+ ?attributeValue = valueOfAttribute ?attribute\r
+\r
+ @enforce\r
+ Execute do\r
+ setAttribute ?element ?attributeName ?attributeValue\r
+\r
+TextContent ?element ?textContent :-\r
+ @bf 1\r
+ ?textContent = textOf ?element\r
+ \r
+ @enforce\r
+ Execute do\r
+ setText ?element ?textContent\r
+\r
+XPathElement ?parentElement ?xpathExpression ?childElement :-\r
+ @bbf 10\r
+ ?childElement <- elementsByXPath ?parentElement ?xpathExpression\r
+\r
+importJava "org.simantics.scl.data.xml.JDomHelper" where\r
+ parseString :: String -> <Proc> Document\r
+ parseFile :: String -> <Proc> Document\r
+ outputString :: Document -> <Proc> String\r
+ \r
+ elementsByXPath :: Element -> String -> <Proc> [Element]\r
+ addNamedChild :: Element -> String -> Element -> <Proc> ()\r
+ setNamespace :: Document -> String -> <Proc> ()\r
+ setElementNamespace :: Element -> String -> <Proc> ()\r
+ clearNamespace :: Document -> <Proc> ()\r
+ clearElementNamespace :: Element -> <Proc> ()\r
+ sortChildrenWith :: (Element -> Element -> <e> Integer) -> Element -> <Proc,e> () \r
+ \r
+ parseStringWithSchemaFile :: String -> String -> <Proc> Document\r
+ //parseStringWithSchemaURL :: URL -> String -> <Proc> Document\r
+ parseFileWithSchemaFile :: String -> String -> <Proc> Document\r
+ //parseFileWithSchemaURL :: URL -> String -> <Proc> Document\r
+\r
+sortChildrenBy :: Ord a => (Element -> <e> a) -> Element -> <Proc,e> ()\r
+sortChildrenBy f el = sortChildrenWith (\x y -> compare (f x) (f y)) el
\ No newline at end of file