X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.scl.data%2Fscl%2FData%2FXML.scl;fp=bundles%2Forg.simantics.scl.data%2Fscl%2FData%2FXML.scl;h=05fef9c99812a9e2832ab445f2e1471e575d3eb6;hb=969bd23cab98a79ca9101af33334000879fb60c5;hp=0000000000000000000000000000000000000000;hpb=866dba5cd5a3929bbeae85991796acb212338a08;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.scl.data/scl/Data/XML.scl b/bundles/org.simantics.scl.data/scl/Data/XML.scl new file mode 100644 index 000000000..05fef9c99 --- /dev/null +++ b/bundles/org.simantics.scl.data/scl/Data/XML.scl @@ -0,0 +1,128 @@ +import "OSGi" + +importJava "org.jdom2.Document" where + data Document + + @JavaName "" + createDocument :: Element -> Document + + @JavaName getRootElement + rootElementOf :: Document -> Element + + @JavaName setRootElement + setRootElement :: Document -> Element -> () + +importJava "org.jdom2.Element" where + data Element + + @JavaName "" + createElement :: String -> Element + + @JavaName getName + nameOf :: Element -> String + + @JavaName getText + textOf :: Element -> String + + @JavaName getParentElement + parentOf :: Element -> Maybe Element + + @JavaName getChildren + childrenWithNameOf :: Element -> String -> [Element] + + @JavaName getChildren + childrenOf :: Element -> [Element] + + @JavaName getChild + childWithNameOf :: Element -> String -> Maybe Element + + @JavaName getAttributeValue + attributeOf :: Element -> String -> Maybe String + + @JavaName getAttributes + attributesOf :: Element -> [Attribute] + + @JavaName addContent + addChild :: Element -> Element -> () + + setName :: Element -> String -> () + + setText :: Element -> String -> () + + setAttribute :: Element -> String -> String -> () + + @JavaName equals + equalsElement :: Element -> Element -> Boolean + +instance Eq Element where + (==) = equalsElement + +importJava "org.jdom2.Attribute" where + data Attribute + + @JavaName getValue + valueOfAttribute :: Attribute -> String + + @JavaName getName + nameOfAttribute :: Attribute -> String + +Element ?parentElement ?childName ?childElement :- + @ffb 1.0 + ?childName = nameOf ?childElement + Optional ?parentElement (parentOf ?childElement) + + @bbf 10.0 + ?childElement <- childrenWithNameOf ?parentElement ?childName + + @bff 10.0 + ?childElement <- childrenOf ?parentElement + ?childName = nameOf ?childElement + + @enforce + Execute (addNamedChild ?parentElement ?childName ?childElement) + +Attribute ?element ?attributeName ?attributeValue :- + @bbf 0.95 + Optional ?attributeValue (attributeOf ?element ?attributeName) + + @bff 4.0 + ?attribute <- attributesOf ?element + ?attributeName = nameOfAttribute ?attribute + ?attributeValue = valueOfAttribute ?attribute + + @enforce + Execute do + setAttribute ?element ?attributeName ?attributeValue + +TextContent ?element ?textContent :- + @bf 1 + ?textContent = textOf ?element + + @enforce + Execute do + setText ?element ?textContent + +XPathElement ?parentElement ?xpathExpression ?childElement :- + @bbf 10 + ?childElement <- elementsByXPath ?parentElement ?xpathExpression + +importJava "org.simantics.scl.data.xml.JDomHelper" where + parseString :: String -> Document + parseFile :: String -> Document + outputString :: Document -> String + + elementsByXPath :: Element -> String -> [Element] + addNamedChild :: Element -> String -> Element -> () + setNamespace :: Document -> String -> () + setElementNamespace :: Element -> String -> () + clearNamespace :: Document -> () + clearElementNamespace :: Element -> () + sortChildrenWith :: (Element -> Element -> Integer) -> Element -> () + + parseStringWithSchemaFile :: String -> String -> Document + //parseStringWithSchemaURL :: URL -> String -> Document + parseFileWithSchemaFile :: String -> String -> Document + //parseFileWithSchemaURL :: URL -> String -> Document + +sortChildrenBy :: Ord a => (Element -> a) -> Element -> () +sortChildrenBy f el = sortChildrenWith (\x y -> compare (f x) (f y)) el \ No newline at end of file