<?xml version="1.0"?>
<component>
<public>

<!-- properties -->

<!-- methods -->
	<method name="initialize">
		<PARAMETER name="params"/>
	</method>
	<method name="transform_filter">
		<PARAMETER name="filter"/>
	</method>
	<method name="transform_outgoing">
		<PARAMETER name="params"/>
		<PARAMETER name="data"/>
	</method>
	<method name="transform_incoming">
		<PARAMETER name="params"/>
		<PARAMETER name="data"/>
	</method>
</public>

<script language="javascript">
<![CDATA[
/*
   $Revision$
   $Id$

   API-Plugin om [nu nog] objecten te kunnen updaten "by name" in plaats van by id.
   Intentie is om hiermee de drempel voor sensorgebruik te verlagen en onafhankelijker
   te laten zijn van ons. inrichting, een consultant. Met een duidelijke beschrijving
   kan een klant zelf sensoren beheren en de leverancier op een geloofwaardige manier
   zelf aan laten sluiten op Facilitor.
   Is een stap voorwaarts, maar mogelijk niet het eindstation. Dat zien we dan weer.
*/

/* properties	*/


/* methods	*/
/* Globals */
var FCLT;

function initialize(params)
{
    FCLT = params;
}

function transform_filter(filter)
{
    return filter;
}

// Interne functies

// Voor objecten, in het bijzonder sensorobjecten.
// Haalt de ins_deel_key op voor een gegeven deel_omschrijving.
// Alleen actief en niet-verwijderd records worden meegenomen.
// Als er exact 1 resultaat is, wordt de bijbehorende key teruggegeven.
// Als er geen of meerdere resultaten zijn, wordt -1 teruggegeven.
function getdeelkey(deelnaam)
{
    var ins_deel_key = -1;
    var sql = "SELECT ins_deel_key"
            + "  FROM ins_deel"
            + " WHERE ins_deel_verwijder IS NULL"
            + "   AND ins_deel_actief = 1"
            + "   AND ins_deel_upper = " + FCLT.safe.quoted_sql_upper(deelnaam);
    var oRs = FCLT.Oracle.Execute(sql);

    if (!oRs.Eof)
    {
        ins_deel_key = oRs("ins_deel_key").Value;
        // we moeten 1 en precies 1 object vinden bij deze beschrijving
        // als het er meer zijn, dan vonden we hem de facto dus niet
        // een maken we er alsnog -1 van.
        oRs.moveNext();
        if (!oRs.Eof)
            ins_deel_key = -1;
    }
    oRs.Close();
    return ins_deel_key;
}

function transform_incoming(params, data)
{
    // Optie is om dit generiek te doen voor alle soorten objecten die we ondersteunen
    // zodat we niet afzonderlijke deelidbyname, gebouwidbyname enz hoeven te hebben
    // Weet niet hoe dat moet of kan.
    if (data.objects)
    {
        // dan zijn er meerdere objecten tegelijk
        for (var i = 0; i < data.objects.length; i++)
        {
            var thisobject = data.objects[i];
            var ins_deel_omschrijving = thisobject.name;
            FCLT.DEZE.__DoLog("IdByName plugin > in = "+FCLT.DEZE.JSON.stringify(thisobject))
            var ins_deel_key = getdeelkey(ins_deel_omschrijving);
            if (ins_deel_key) {
                thisobject.id = ins_deel_key;
            }
            FCLT.DEZE.__DoLog("IdByName plugin > deze "+FCLT.DEZE.JSON.stringify(thisobject));
        }
        FCLT.DEZE.__DoLog("IdByName plugin > out "+FCLT.DEZE.JSON.stringify(data));
    }
    else
    {
        // Als het er eentje is, dan maak er een array van probeer het dan opnieuw
        if (data.object)
        {
            return transform_incoming(params, {"objects": [data.object]});
        }
    }
    return data;
}

function transform_outgoing(params, data)
{
    return data;
}
]]>
</script>
</component>