]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.data/scl/Data/XML.scl
Added info on backup location to documentation backup.
[simantics/platform.git] / bundles / org.simantics.scl.data / scl / Data / XML.scl
1 import "OSGi"\r
2 \r
3 importJava "org.jdom2.Document" where\r
4     data Document\r
5     \r
6     @JavaName "<init>"\r
7     createDocument :: Element -> <Proc> Document\r
8     \r
9     @JavaName getRootElement\r
10     rootElementOf :: Document -> <Proc> Element\r
11     \r
12     @JavaName setRootElement\r
13     setRootElement :: Document -> Element -> <Proc> ()\r
14     \r
15 importJava "org.jdom2.Element" where\r
16     data Element\r
17     \r
18     @JavaName "<init>"\r
19     createElement :: String -> <Proc> Element\r
20     \r
21     @JavaName getName\r
22     nameOf :: Element -> <Proc> String\r
23     \r
24     @JavaName getText\r
25     textOf :: Element -> <Proc> String\r
26     \r
27     @JavaName getParentElement\r
28     parentOf :: Element -> <Proc> Maybe Element\r
29     \r
30     @JavaName getChildren\r
31     childrenWithNameOf :: Element -> String -> <Proc> [Element]\r
32     \r
33     @JavaName getChildren\r
34     childrenOf :: Element -> <Proc> [Element]\r
35     \r
36     @JavaName getChild\r
37     childWithNameOf :: Element -> String -> <Proc> Maybe Element\r
38     \r
39     @JavaName getAttributeValue\r
40     attributeOf :: Element -> String -> <Proc> Maybe String\r
41     \r
42     @JavaName getAttributes\r
43     attributesOf :: Element -> <Proc> [Attribute]\r
44     \r
45     @JavaName addContent\r
46     addChild :: Element -> Element -> <Proc> ()\r
47     \r
48     setName :: Element -> String -> <Proc> ()\r
49     \r
50     setText :: Element -> String -> <Proc> ()\r
51     \r
52     setAttribute :: Element -> String -> String -> <Proc> ()\r
53     \r
54     @JavaName equals\r
55     equalsElement :: Element -> Element -> Boolean\r
56 \r
57 instance Eq Element where\r
58     (==) = equalsElement\r
59 \r
60 importJava "org.jdom2.Attribute" where\r
61     data Attribute\r
62     \r
63     @JavaName getValue\r
64     valueOfAttribute :: Attribute -> <Proc> String\r
65     \r
66     @JavaName getName\r
67     nameOfAttribute :: Attribute -> <Proc> String\r
68 \r
69 Element ?parentElement ?childName ?childElement :-\r
70     @ffb 1.0\r
71     ?childName = nameOf ?childElement\r
72     Optional ?parentElement (parentOf ?childElement)\r
73         \r
74     @bbf 10.0\r
75     ?childElement <- childrenWithNameOf ?parentElement ?childName\r
76 \r
77     @bff 10.0\r
78     ?childElement <- childrenOf ?parentElement\r
79     ?childName = nameOf ?childElement\r
80     \r
81     @enforce\r
82     Execute (addNamedChild ?parentElement ?childName ?childElement)\r
83     \r
84 Attribute ?element ?attributeName ?attributeValue :-\r
85     @bbf 0.95\r
86     Optional ?attributeValue (attributeOf ?element ?attributeName)\r
87 \r
88     @bff 4.0\r
89     ?attribute <- attributesOf ?element\r
90     ?attributeName = nameOfAttribute ?attribute\r
91     ?attributeValue = valueOfAttribute ?attribute\r
92 \r
93     @enforce\r
94     Execute do\r
95         setAttribute ?element ?attributeName ?attributeValue\r
96 \r
97 TextContent ?element ?textContent :-\r
98     @bf 1\r
99     ?textContent = textOf ?element\r
100     \r
101     @enforce\r
102     Execute do\r
103         setText ?element ?textContent\r
104 \r
105 XPathElement ?parentElement ?xpathExpression ?childElement :-\r
106     @bbf 10\r
107     ?childElement <- elementsByXPath ?parentElement ?xpathExpression\r
108 \r
109 importJava "org.simantics.scl.data.xml.JDomHelper" where\r
110     parseString :: String -> <Proc> Document\r
111     parseFile :: String -> <Proc> Document\r
112     outputString :: Document -> <Proc> String\r
113     \r
114     elementsByXPath :: Element -> String -> <Proc> [Element]\r
115     addNamedChild :: Element -> String -> Element -> <Proc> ()\r
116     setNamespace :: Document -> String -> <Proc> ()\r
117     setElementNamespace :: Element -> String -> <Proc> ()\r
118     clearNamespace :: Document -> <Proc> ()\r
119     clearElementNamespace :: Element -> <Proc> ()\r
120     sortChildrenWith :: (Element -> Element -> <e> Integer) -> Element -> <Proc,e> () \r
121     \r
122     parseStringWithSchemaFile :: String -> String -> <Proc> Document\r
123     //parseStringWithSchemaURL  :: URL    -> String -> <Proc> Document\r
124     parseFileWithSchemaFile   :: String -> String -> <Proc> Document\r
125     //parseFileWithSchemaURL    :: URL    -> String -> <Proc> Document\r
126 \r
127 sortChildrenBy :: Ord a => (Element -> <e> a) -> Element -> <Proc,e> ()\r
128 sortChildrenBy f el = sortChildrenWith (\x y -> compare (f x) (f y)) el