bool MailerGenerator::generate() const
{
    if (actionList.isEmpty()) {
        qCritical("Bad parameter: Action name empty");
        return false;
    }

    QStringList files;
    FileWriter fwh(dstDir.filePath(mailerName.toLower() + "mailer.h"));
    FileWriter fws(dstDir.filePath(mailerName.toLower() + "mailer.cpp"));

    // Generates a mailer header file
    QString act;
    for (QStringListIterator i(actionList); i.hasNext(); ) {
        act.append("    void ").append(i.next()).append("();\n");
    }
    
    QString code = QString(MAILER_HEADER_FILE_TEMPLATE).arg(mailerName.toUpper(), mailerName, act);
    fwh.write(code, false);
    files << fwh.fileName();
    
    // Generates a mailer source code
    QString actimpl;
    for (QStringListIterator i(actionList); i.hasNext(); ) {
        actimpl.append("void ").append(mailerName).append("Mailer::").append(i.next()).append("()\n{\n    //\n    // write codes\n    //\n\n    deliver(\"mail\");\n}\n\n");
    }
    code = QString(MAILER_SOURCE_FILE_TEMPLATE).arg(mailerName.toLower(), actimpl);
    fws.write(code, false);
    files << fws.fileName();

    // Updates a project file
    ProjectFileGenerator progen(dstDir.filePath("controllers.pro"));
    return progen.add(files);
}
bool ControllerGenerator::generate(const QString &dstDir) const
{
    // Reserved word check
    if (ngCtlrName()->contains(tableName.toLower())) {
        qCritical("Reserved word error. Please use another word.  Controller name: %s", qPrintable(tableName));
        return false;
    }

    QDir dir(dstDir);
    QStringList files;
    FileWriter fwh(dir.filePath(controllerName.toLower() + "controller.h"));
    FileWriter fws(dir.filePath(controllerName.toLower() + "controller.cpp"));

    if (actionList.isEmpty()) {
        if (fieldList.isEmpty()) {
            qCritical("Incorrect parameters.");
            return false;
        }

        QPair<QString, QVariant::Type> pair;
        if (primaryKeyIndex >= 0)
            pair = fieldList[primaryKeyIndex];

        // Generates a controller source code
        QString sessInsertStr;
        QString sessGetStr;
        QString revStr;
        QString varName = enumNameToVariableName(controllerName);

        // Generates a controller header file
        QString code = QString(CONTROLLER_HEADER_FILE_TEMPLATE).arg(controllerName.toUpper(), controllerName, fieldNameToVariableName(pair.first));
        fwh.write(code, false);
        files << fwh.fileName();

        if (lockRevIndex >= 0) {
            sessInsertStr = QString("            session().insert(\"%1_lockRevision\", model.lockRevision());\n").arg(varName);
            sessGetStr = QString("        int rev = session().value(\"%1_lockRevision\").toInt();\n").arg(varName);
            revStr = QLatin1String(", rev");
        }

        code = QString(CONTROLLER_SOURCE_FILE_TEMPLATE).arg(controllerName.toLower(), controllerName, varName, convMethod()->value(pair.second).arg(fieldNameToVariableName(pair.first)), sessInsertStr, sessGetStr, revStr, fieldNameToVariableName(pair.first));
        fws.write(code, false);
        files << fws.fileName();

    } else {
        // Generates a controller header file
        QString actions;
        for (QStringListIterator i(actionList); i.hasNext(); ) {
            actions.append("    void ").append(i.next()).append("();\n");
        }

        QString code = QString(CONTROLLER_TINY_HEADER_FILE_TEMPLATE).arg(controllerName.toUpper(), controllerName, actions);
        fwh.write(code, false);
        files << fwh.fileName();

        // Generates a controller source code
        QString actimpl;
        for (QStringListIterator i(actionList); i.hasNext(); ) {
            actimpl.append("void ").append(controllerName).append("Controller::").append(i.next()).append("()\n{\n    // write code\n}\n\n");
        }
        code = QString(CONTROLLER_TINY_SOURCE_FILE_TEMPLATE).arg(controllerName.toLower(), controllerName, actimpl);
        fws.write(code, false);
        files << fws.fileName();
    }

    // Generates a project file
    ProjectFileGenerator progen(dir.filePath("controllers.pro"));
    return progen.add(files);
}
Exemplo n.º 3
0
int main(void){
    fundoshi::string fs1, fs2;
    
    // const char *からfundoshi::stringを生成する例
    fs1 = fundoshi::string("abcde");
    
    std::cout << fs1.length() << std::endl; // 5 が表示される
    std::cout << fs1[0] << std::endl; // a が表示される
    std::cout << fs1[2] << std::endl; // c が表示される
    
    // std::stringからfundoshi::stringを生成する例
    std::string x("abcde");
    fs1 = fundoshi::string(x);
    
    std::cout << fs1.length() << std::endl; // 5 が表示される
    std::cout << fs1[0] << std::endl; // a が表示される
    std::cout << fs1[2] << std::endl; // c が表示される
    
    // std::stringのインスタンスとメモリを共有したまま、
    // それの部分文字列に相当するfundoshi::stringを生成する例
    fs2 = fundoshi::string(&(x[1]), 3); // ここで、yは「"bcd"」を表している
    
    std::cout << fs2.length() << std::endl; // 3 が表示される
    std::cout << fs2[0] << std::endl; // b が表示される
    std::cout << fs2[2] << std::endl; // d が表示される
    
	// メモリは共有されているので、元のメモリを書き換えると
	// fundoshi::stringインスタンスの内容も変更される
    x[2] = 'f';
    std::cout << fs1[2] << std::endl; // f が表示される
    std::cout << fs2[1] << std::endl; // f が表示される

    // fundoshiにはwstringも存在する
    fundoshi::wstring fws(L"vwxyz");
    
    std::cout << fws.length() << std::endl; // 5 が表示される
    std::cout << fws[0] << std::endl; // vのASCIIコード(118)が表示される
    std::cout << fws[2] << std::endl; // xのASCIIコード(120)が表示される
    
    // charやwchar_t以外も使える
    int y[10] = {0, 1, 4, 9, 16, 25, 36, 49, 64, 81};
    fundoshi::basic_string<int> fi(y, 10);
    
    std::cout << fi.length() << std::endl; // 10 が表示される
    std::cout << fi[5] << std::endl; // 25 が表示される
    std::cout << fi[8] << std::endl; // 64 が表示される
    
    // 文字列比較
    std::cout << "string comparison" << std::endl;
    
    fs1 = fundoshi::string("abc");
    fs2 = fundoshi::string("abc");
    std::cout << (fs1 == fs2); // 1が表示される
    std::cout << (fs1 >  fs2); // 0が表示される
    std::cout << (fs1 >= fs2); // 1が表示される
    std::cout << (fs1 <  fs2); // 0が表示される
    std::cout << (fs1 <= fs2); // 1が表示される
    std::cout << std::endl;
    
    fs2 = fundoshi::string("adc");
    std::cout << (fs1 == fs2); // 0が表示される
    std::cout << (fs1 >  fs2); // 0が表示される
    std::cout << (fs1 >= fs2); // 0が表示される
    std::cout << (fs1 <  fs2); // 1が表示される
    std::cout << (fs1 <= fs2); // 1が表示される
    std::cout << std::endl;
    
    fs2 = fundoshi::string("ab");
    std::cout << (fs1 == fs2); // 0が表示される
    std::cout << (fs1 >  fs2); // 1が表示される
    std::cout << (fs1 >= fs2); // 1が表示される
    std::cout << (fs1 <  fs2); // 0が表示される
    std::cout << (fs1 <= fs2); // 0が表示される
    std::cout << std::endl;

    fs2 = fundoshi::string("abcd");
    std::cout << (fs1 == fs2); // 0が表示される
    std::cout << (fs1 >  fs2); // 0が表示される
    std::cout << (fs1 >= fs2); // 0が表示される
    std::cout << (fs1 <  fs2); // 1が表示される
    std::cout << (fs1 <= fs2); // 1が表示される
    std::cout << std::endl;
    
    return 0;
}