| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| /** |
| * SCDL parsing functions. |
| */ |
| var scdl = {}; |
| |
| /** |
| * Returns a composite element. |
| */ |
| scdl.composite = function(l) { |
| var cs = namedElementChildren("'composite", l); |
| if (isNull(cs)) |
| return cs; |
| return car(cs); |
| }; |
| |
| /** |
| * Returns a list of components in a composite. |
| */ |
| scdl.components = function(l) { |
| var cs = namedElementChildren("'composite", l); |
| if (isNull(cs)) |
| return cs; |
| return namedElementChildren("'component", car(cs)); |
| }; |
| |
| /** |
| * Returns a list of service promotions in a composite. |
| */ |
| scdl.promotions = function(l) { |
| var cs = namedElementChildren("'composite", l); |
| if (isNull(cs)) |
| return cs; |
| return namedElementChildren("'service", car(cs)); |
| }; |
| |
| /** |
| * Returns the target of a service promotion. |
| */ |
| scdl.promote = function(l) { |
| var puri = namedAttributeValue("'promote", l); |
| if (isNull(puri)) |
| return puri; |
| return car(tokens(puri)); |
| }; |
| |
| /** |
| * Returns the name of a component, componentType, service or reference. |
| */ |
| scdl.name = function(l) { |
| return namedAttributeValue("'name", l); |
| }; |
| |
| /** |
| * Returns the description of a component, componentType, service or reference. |
| */ |
| scdl.documentation = function(l) { |
| var d = namedElementChildren("'documentation", l); |
| if (isNull(d)) |
| return null; |
| if (!elementHasValue(car(d))) |
| return null; |
| var v = elementValue(car(d)); |
| return v; |
| }; |
| |
| /** |
| * Returns the title of a component or componentType. |
| */ |
| scdl.title = function(l) { |
| return namedAttributeValue("'title", l); |
| }; |
| |
| /** |
| * Returns the display style of a component, componentType, reference or property. |
| */ |
| scdl.style = function(l) { |
| return namedAttributeValue("'style", l); |
| }; |
| |
| /** |
| * Returns the color of a component or componentType. |
| */ |
| scdl.color = function(l) { |
| return namedAttributeValue("'color", l); |
| }; |
| |
| /** |
| * Returns the x position of a component. |
| */ |
| scdl.x = function(l) { |
| return namedAttributeValue("'x", l); |
| }; |
| |
| /** |
| * Returns the y position of a component. |
| */ |
| scdl.y = function(l) { |
| return namedAttributeValue("'y", l); |
| }; |
| |
| /** |
| * Returns the implementation of a component. |
| */ |
| scdl.implementation = function(l) { |
| function filterImplementation(v) { |
| return isElement(v) && cadr(v).match("implementation.") != null; |
| } |
| |
| var n = filter(filterImplementation, l); |
| if (isNull(n)) |
| return null; |
| return car(n); |
| }; |
| |
| /** |
| * Returns the type of a component or componentType implementation. |
| */ |
| scdl.implementationType = function(l) { |
| return elementName(l).substring(1); |
| }; |
| |
| /** |
| * Returns the URI of a service, reference or implementation. |
| */ |
| scdl.uri = function(l) { |
| return namedAttributeValue("'uri", l); |
| }; |
| |
| /** |
| * Returns the align attribute of a service or reference. |
| */ |
| scdl.align = function(l) { |
| return namedAttributeValue("'align", l); |
| }; |
| |
| /** |
| * Returns the visible attribute of a service or reference. |
| */ |
| scdl.visible = function(l) { |
| return namedAttributeValue("'visible", l); |
| }; |
| |
| /** |
| * Returns the clonable attribute of a reference. |
| */ |
| scdl.clonable = function(l) { |
| return namedAttributeValue("'clonable", l); |
| }; |
| |
| /** |
| * Returns a list of services in a component or componentType. |
| */ |
| scdl.services = function(l) { |
| return namedElementChildren("'service", l); |
| }; |
| |
| /** |
| * Returns a list of references in a component or componentType. |
| */ |
| scdl.references = function(l) { |
| return namedElementChildren("'reference", l); |
| }; |
| |
| /** |
| * Returns a list of bindings in a service or reference. |
| */ |
| scdl.bindings = function(l) { |
| function filterBinding(v) { |
| return isElement(v) && cadr(v).match("binding.") != null; |
| } |
| |
| return filter(filterBinding, l); |
| }; |
| |
| /** |
| * Returns the type of a binding. |
| */ |
| scdl.bindingType = function(l) { |
| return elementName(l).substring(1); |
| }; |
| |
| /** |
| * Returns the target of a reference. |
| */ |
| scdl.target = function(l) { |
| function targetURI() { |
| function bindingsTarget(l) { |
| if (isNull(l)) |
| return null; |
| var u = scdl.uri(car(l)); |
| if (!isNull(u)) |
| return u; |
| return bindingsTarget(cdr(l)); |
| } |
| |
| var t = namedAttributeValue("'target", l); |
| if (!isNull(t)) |
| return t; |
| return bindingsTarget(scdl.bindings(l)); |
| } |
| var turi = targetURI(); |
| if (isNull(turi)) |
| return turi; |
| return car(tokens(turi)); |
| }; |
| |
| /** |
| * Returns a list of properties in a component or componentType. |
| */ |
| scdl.properties = function(l) { |
| return namedElementChildren("'property", l); |
| }; |
| |
| /** |
| * Returns the value of a property. |
| */ |
| scdl.propertyValue = function(l) { |
| if (!elementHasValue(l)) |
| return ''; |
| return elementValue(l); |
| }; |
| |
| /** |
| * Convert a list of elements to a name -> element assoc list. |
| */ |
| scdl.nameToElementAssoc = function(l) { |
| if (isNull(l)) |
| return l; |
| return cons(mklist(scdl.name(car(l)), car(l)), scdl.nameToElementAssoc(cdr(l))); |
| }; |
| |