Ambrosia

 view release on metacpan or  search on metacpan

share/Templates/Common/ServiceHandlerModule.xsl  view on Meta::CPAN

{
    package <xsl:value-of select="$RealAppName" />::<xsl:value-of select="$RealAppName" />ServiceHandler;
    use strict;
    use warnings;

    use Ambrosia::Logger assign => '<xsl:value-of select="$RealAppName" />';
    our $VERSION = sprintf('0.%03d', q$Revision: 01 $ =~ /(\d+)/o);


    #use SOAP::Lite +trace => 'all';
    use SOAP::Transport::HTTP;
    $SOAP::Constants::DO_NOT_USE_XML_PARSER = 1;

    sub handler
    {
        my $r = shift;

        my $server = SOAP::Transport::HTTP::Apache
            ->dispatch_with( { $ENV{HTTP_SOAPACTION} => '<xsl:value-of select="$RealAppName" />::<xsl:value-of select="$RealAppName" />Services' } );

        eval
        {
            $server->handler($r);
        };
        if ( $@ )
        {
            logger->error($@);
        }
        1;
    }
}

{
    package <xsl:value-of select="$RealAppName" />::<xsl:value-of select="$RealAppName" />Services;
    use strict;
    use warnings;
    our $VERSION = sprintf('0.%03d', q$Revision: 01 $ =~ /(\d+)/o);

    BEGIN
    {
        use Ambrosia::Config assign => '<xsl:value-of select="$RealAppName" />';
        use Ambrosia::Logger assign => '<xsl:value-of select="$RealAppName" />';
    }

    use Ambrosia::Context;
    use Ambrosia::DataProvider;
    use Ambrosia::Dispatcher;
    use Ambrosia::View::XSLT;
    use Ambrosia::View::JSON;
    use Ambrosia::BaseManager;

    our $dispatcher;
    our $Result;
    our $viewXML;
    our $viewJSON;
    BEGIN
    {
        instance Ambrosia::DataProvider( <xsl:value-of select="$RealAppName" /> => config->data_source);
        instance Ambrosia::Context();

        $viewXML  = new Ambrosia::View::XSLT( charset => config->Charset, rootName => '<xsl:value-of select="$UcAppName" />' );
        $viewJSON = new Ambrosia::View::JSON( charset => config->Charset );

        $dispatcher = Ambrosia::Dispatcher
            ->new()
            ->on_error(sub {
                    logger->error(@_);
                    storage->foreach('cancel_transaction');
                    storage->foreach('close_connection');
                    Context->error(@_);
                    die $@;
                })
            ->on_success(sub {
                    if ( @_ )
                    {
                        if ( Context->param('format') eq 'json' )
                        {
                            $Result = $viewJson->render(undef, Context->data);
                        }
                        else
                        {
                            $Result = $viewXml->as_xml;
                        }
                    }
                    else
                    {
                        error('Action is undefined.');
                    }

                    storage->foreach('save_transaction');
                    storage->foreach('close_connection');
                });
    }

<xsl:for-each select="//atns:Entitys/atns:Entity">
    <xsl:variable name="entityName" select="translate(@Name, $vUppercaseChars_CONST, $vLowercaseChars_CONST)"/>
    <xsl:variable name="typeEntity" select="translate(@Type, $vLowercaseChars_CONST, $vUppercaseChars_CONST)"/>
    <xsl:if test="$typeEntity='TABLE' or $typeEntity='VIEW'">
    sub get<xsl:value-of select="@Name"/>
    {
        my $proto = shift;
        <xsl:for-each select="./atns:Key/atns:FieldRef">my $<xsl:value-of select="@Name"/> = shift;
</xsl:for-each>
        run(
            action => '/get/<xsl:value-of select="$entityName" />',
            <xsl:for-each select="./atns:Key/atns:FieldRef">
            <xsl:value-of select="@Name"/> => $<xsl:value-of select="@Name"/>,</xsl:for-each>
        );
        return $Result;
    }
    </xsl:if>
</xsl:for-each>


    sub run
    {
        my %params = @_;
        eval
        {
            Ambrosia::Config::assign '<xsl:value-of select="$RealAppName" />';
            Ambrosia::Logger::assign '<xsl:value-of select="$RealAppName" />';
            Ambrosia::DataProvider::assign '<xsl:value-of select="$RealAppName" />';



( run in 0.565 second using v1.01-cache-2.11-cpan-6aa56a78535 )