javamanager/javaappscheme/src.s60/serviceapp.cpp
author hgs
Fri, 17 Sep 2010 16:44:34 +0300
changeset 72 1f0034e370aa
parent 67 63b81d807542
permissions -rw-r--r--
v2.2.15_1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
56
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     1
/*
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     3
* All rights reserved.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     8
*
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     9
* Initial Contributors:
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    11
*
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    12
* Contributors:
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    13
*
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    14
* Description:  QT Service application the implements support for
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    15
*               starting Java applications using "javaapp:" QUrl
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    16
*
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    17
*/
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    18
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    19
#include <QUrl>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    20
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    21
#include "logger.h"
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    22
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    23
#include "serviceapp.h"
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    24
#include <xqserviceutil.h>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    25
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    26
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    27
ServiceApp::ServiceApp(int &argc, char **argv)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    28
    : QApplication(argc, argv), mUriService(NULL)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    29
{
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    30
    LOG(EJavaQtServiceApp, EInfo, "ServiceApp (QApplication) constructor called");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    31
    bool isService = XQServiceUtil::isService();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    32
    if (isService)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    33
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    34
        mUriService = new UriService(this);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    35
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    36
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    37
    QString interface = XQServiceUtil::interfaceName();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    38
    QString operation = XQServiceUtil::operationName();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    39
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    40
    QString t = "SERVICEAPP:\n";
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    41
    t = t + (isService ?  "    Service launch\n" : "    Normal launch\n");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    42
    t = t + (XQServiceUtil::isEmbedded() ? "    Embedded\n" : "    Not embedded\n");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    43
    t = t + ("    Interface=" + interface + "\n");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    44
    t = t + ("    Operation=" + operation + "\n");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    45
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    46
    std::string callType = t.toStdString();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    47
    LOG1(EJavaQtServiceApp, EInfo, "ServiceApp called as %s", callType.c_str());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    48
}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    49
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    50
ServiceApp::~ServiceApp()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    51
{
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    52
    LOG(EJavaQtServiceApp, EInfo, "ServiceApp destructor called");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    53
    delete mUriService;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    54
}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    55
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    56
void ServiceApp::quit()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    57
{
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    58
    LOG(EJavaQtServiceApp, EInfo, "ServiceApp quit() called");
67
63b81d807542 v2.2.13_1
hgs
parents: 56
diff changeset
    59
    exit(KErrNone); // Exit with OK status
56
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    60
}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    61
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    62
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    63
// ----------UriService---------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    64
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    65
// The service string param given to XQServiceProvider must contain first
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    66
// the name of the name of the service and then the name of the interface
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    67
// (from service_conf.xml)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    68
UriService::UriService(ServiceApp* parent)
72
1f0034e370aa v2.2.15_1
hgs
parents: 67
diff changeset
    69
: XQServiceProvider(QLatin1String("javaappscheme.com.nokia.symbian.IUriView"),parent)
56
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    70
{
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    71
    LOG(EJavaQtServiceApp, EInfo, "UriService::UriService called");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    72
    publishAll();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    73
}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    74
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    75
UriService::~UriService()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    76
{
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    77
    LOG(EJavaQtServiceApp, EInfo, "UriService::~UriService called");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    78
}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    79
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    80
bool UriService::view(const QString& uri)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    81
{
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    82
    LOG(EJavaQtServiceApp, EInfo, "UriService::view(uri) called");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    83
    return view(uri, true);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    84
}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    85
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    86
bool UriService::view(const QString& uri, bool retValue)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    87
{
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    88
    LOG(EJavaQtServiceApp, EInfo, "UriService::view(uri, retValue) called");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    89
    std::wstring stdWStrUri = uri.toStdWString();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    90
    LOG1(EJavaQtServiceApp, EInfo, "url is %S", stdWStrUri.c_str());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    91
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    92
    XQRequestInfo info = requestInfo();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    93
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    94
    // Start javalauncher.exe and pass the Url to it
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    95
    _LIT(KJavaLauncherExe, "javalauncher.exe");
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    96
    RProcess rProcess;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    97
    retValue = true;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    98
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    99
    // start
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   100
    HBufC* bufUri = HBufC::New(stdWStrUri.size());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   101
    if (0 == bufUri)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   102
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   103
        return false;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   104
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   105
    TPtr16 ptrUri(bufUri->Des());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   106
    ptrUri.Append((const TUint16*)stdWStrUri.c_str(), stdWStrUri.size());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   107
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   108
    TInt err = rProcess.Create(KJavaLauncherExe, ptrUri);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   109
    if (KErrNone == err)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   110
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   111
        // This call will wait until javalauncher exits (or panics)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   112
        TRequestStatus status;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   113
        rProcess.Logon(status);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   114
        rProcess.Resume();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   115
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   116
        // now wait until javalauncher exits
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   117
        User::WaitForRequest(status);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   118
        err = status.Int();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   119
        if (err != KErrNone)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   120
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   121
            ELOG1(EJavaQtServiceApp,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   122
                "UriService::view javalauncher exited with error %d", err);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   123
            retValue = false;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   124
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   125
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   126
    else
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   127
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   128
        ELOG1(EJavaQtServiceApp,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   129
            "UriService::view Cannot create javalauncher process, error %d", err);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   130
        retValue = false;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   131
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   132
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   133
    // free resources before returning
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   134
    rProcess.Close();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   135
    delete bufUri;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   136
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   137
    if (KErrNone != err)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   138
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   139
#ifndef _DEBUG
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   140
        // Make sure Url is logged always if an error has happened
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   141
        ELOG1(EJavaQtServiceApp, "UriService::view url was %S", stdWStrUri.c_str());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   142
#endif
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   143
        retValue = false;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   144
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   145
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   146
    return retValue;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   147
}