blob: fd0e08035fa0964b60daae6aff5180b7e9850e1f [file] [log] [blame]
/*
* 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)));
};