VBAソース生成(以後参考用)

Option Explicit

Dim className As String
Dim classNamejp As String
Dim classDesc As Collection
Dim coder As String
Dim pName As String
Dim paraStartLine As Integer
Dim resultStartLine As Integer

'---------------------------------------------------------------------
'   ファイル出力
'       ファイルへの出力を行う
'
'   引数
'       path:出力先パス
'       sortString:出力内容
'
'   戻り値:生成されたパス
'---------------------------------------------------------------------
Public Function writeFile(path As String, sortString As Collection) As Long
    Dim value
'    Dim fp As Long
'
'    fp = FreeFile
'    Open path For Output Access Write Lock Write As fp
'
'    For Each value In sortString
'        Print #fp, value
'    Next value
'
'    Close fp
   
    Dim Stm As New ADODB.Stream
    Stm.Type = adTypeText
    Stm.Mode = adModeUnknown
    Stm.Open
    Stm.Charset = "utf-8"
    For Each value In sortString
        Stm.WriteText value & vbCrLf
    Next value
    Stm.SaveToFile path, adModeWrite
    Stm.Close


End Function

Public Sub createFile()
    readBook
    createListener
    createEvent
    createResult
    createConfig
End Sub

Private Sub readBook()
    className = Range("L5")
   
    className = Left(className, InStr(className, "Event") - 1)
   
    classNamejp = Replace(Range("AL3"), "処理", "")
   
    Dim i As Integer
    i = 9
    Set classDesc = New Collection
   
    Do Until Trim(Range("A" & i)) = ""
        classDesc.add Range("A" & i)
        i = i + 1
    Loop

    coder = ""
   
    pName = Right(Range("Y2"), 2)
   
    Do Until Trim(Range("A" & i)) = "入力パラメータ"
        i = i + 1
    Loop
    paraStartLine = i + 2
   
    Do Until Trim(Range("A" & i)) = "出力パラメータ"
        i = i + 1
    Loop
    resultStartLine = i + 2
   
End Sub

Private Sub createEvent()
    createVO False
End Sub

Private Sub createListener()
    Dim listenerName As String
    listenerName = className & "EventListener.java"
    Dim value
    Dim code As New Collection
    code.add "package jp.hm.baj.event.listener." & LCase(pName) & ".common;"
    code.add ""
    code.add "import jp.co.intra_mart.framework.base.event.Event;"
    code.add "import jp.co.intra_mart.framework.base.event.EventResult;"
    code.add "import jp.co.intra_mart.framework.system.exception.ApplicationException;"
    code.add "import jp.co.intra_mart.framework.system.exception.SystemException;"
    code.add ""
    code.add "/**"
    code.add " * " & classNamejp & "処理イベントリスナー。"
    code.add " *"
    code.add " * <pre>"
    code.add " * " & classNamejp & "処理"
    code.add " * </pre>"
    code.add " *"
    code.add " * @author NTTDATA " & coder
    code.add " * @version 1.00 初期リリース"
    code.add " */"
   
    If InStr(className, "Check") > 0 Then
        'チェック共通の場合
        code.add "public class " & className & "EventListener extends AbstractCheckElementEventListener {"
        code.add ""
        code.add "    /**"
        code.add "     * " & classNamejp
        code.add "     *"
        code.add "     * <pre>"
        '概要が複数行の可能
        For Each value In classDesc
            code.add "     * " & value
        Next
        code.add "     * </pre>"
        code.add "     *"
        code.add "     * @throws SystemException システム上のエラーが発生した場合にスローする。"
        code.add "     * @throws ApplicationException 業務チェックでエラーが発生した場合にスローする。"
        code.add "     */"
        code.add "    @Override"
        code.add "    protected EventResult check() throws SystemException, ApplicationException {"
        code.add ""
        code.add ""
        code.add "        // TODO:業務実装"
        code.add ""
        code.add " "
        code.add "    }"
        code.add "}"
    Else
        'チェックではない共通の場合
        code.add "public class " & className & "EventListener extends " & UCase(pName) & "EventListener {"
        code.add ""
        code.add "    /**"
        code.add "     * " & classNamejp
        code.add "     *"
        code.add "     * <pre>"
        '概要が複数行の可能
        For Each value In classDesc
            code.add "     * " & value
        Next
        code.add "     * </pre>"
        code.add "     *"
        code.add "     * @param event " & classNamejp & "処理イベント"
        code.add "     * @return " & classNamejp & "処理イベントリザルト"
        code.add "     * @throws SystemException システム上のエラーが発生した場合にスローする。"
        code.add "     * @throws ApplicationException 業務チェックでエラーが発生した場合にスローする。"
        code.add "     */"
        code.add "    @Override"
        code.add "    protected EventResult fire(Event event) throws SystemException, ApplicationException {"
        code.add ""
        code.add "        " & className & "Event inputEvent = (" & className & "Event)event;"
        code.add ""
        code.add "        " & className & "EventResult eventResult = new " & className & "EventResult();"
        code.add ""
        code.add "        // TODO:業務実装"
        code.add ""
        code.add "        return eventResult;"
        code.add "    }"
        code.add "}"
    End If
   
    writeFile "C:\" & listenerName, code
End Sub

Private Sub createResult()
    createVO True
End Sub

Private Sub createConfig()
    Dim cfg As String
    Dim no As String
    no = Range("AL2")
    Dim key As String
    key = Range("H16")
    Dim code As New Collection
   
    code.add ""
   
    code.add "    <!-- " & no & "_共通機能_" & classNamejp & " -->"
    code.add "    <event-group>"
    code.add "        <display-name>" & no & "_共通機能_" & classNamejp & "</display-name>"
    code.add "        <event-key>" & key & "</event-key>"
    If InStr(className, "Check") > 0 Then
        code.add "        <event-class>jp.hm.baj.event.CheckElementEvent</event-class>"
    Else
        code.add "        <event-class>jp.hm.baj.event." & LCase(pName) & ".common." & className & "Event</event-class>"
    End If
    code.add "        <event-factory>"
    code.add "            <factory-class>jp.co.intra_mart.framework.base.event.StandardEventListenerFactory</factory-class>"
    code.add "            <init-param>"
    code.add "                <param-name>listener</param-name>"
    code.add "                <param-value>jp.hm.baj.event.listener." & LCase(pName) & ".common." & className & "EventListener</param-value>"
    code.add "            </init-param>"
    code.add "        </event-factory>"
    code.add "        <pre-trigger>"
    code.add "            <display-name>操作ログイベント</display-name>"
    code.add "            <trigger-class>jp.hm.baj.event.trigger.OperationLogEventTrigger</trigger-class>"
    code.add "        </pre-trigger>"
    code.add "    </event-group>"
    writeFile "C:\" & "cfg.txt", code
End Sub

Private Sub createMCL()

End Sub

Private Function createSerialVersionUID() As String
    Dim result As String
    result = Replace(str(Rnd() * 1000000000), ".", "")
    result = Replace(result, " ", "")
    result = result & Replace(str(Rnd() * 1000000000), ".", "")
    result = Replace(result, " ", "")
    result = result & Replace(str(Rnd() * 1000000000), ".", "")
    result = Replace(result, " ", "")
    result = "-2" & Left(result, 18) & "L"
    createSerialVersionUID = result
End Function

Private Sub createVO(isResult As Boolean)
    If InStr(className, "Check") > 0 Then Exit Sub
   
    Dim endStr As String
    Dim endStrJp As String
    Dim startLine As Integer
    startLine = paraStartLine
    If isResult Then
        endStr = "Result"
        endStrJp = "リザルト"
        startLine = resultStartLine
    End If
   
    Dim fileName As String
    Dim code As New Collection
   
    fileName = className & "Event" & endStr & ".java"
   
    code.add "package jp.hm.baj.event." & LCase(pName) & ".common;"
    code.add ""
    code.add "import jp.hm.baj.event.ac." & UCase(pName) & "BaseEvent;"
    code.add ""
    code.add "/**"
    code.add " * " & classNamejp & "処理イベント" & endStrJp & "。"
    code.add " *"
    code.add " * @author NTTDATA " & coder
    code.add " * @version 1.00 初期リリース"
    code.add " */"
    code.add "public class " & className & "Event" & endStr & " extends " & UCase(pName) & "BaseEvent" & endStr & " {"
    code.add ""
    code.add "    /** シリアル番号 */"
    code.add "    private static final long serialVersionUID = " & createSerialVersionUID() & ";"
   
    Dim i As Integer
    i = startLine
    Dim eName As String
    Dim enameU As String
    Dim eNameJp As String
    Dim eType As String
    Do Until Range("C" & i) = ""
        eName = Range("M" & i)
        eName = LCase(Left(eName, 1)) & Right(eName, Len(eName) - 1)
        enameU = UCase(Left(eName, 1)) & Right(eName, Len(eName) - 1)
        eNameJp = Range("C" & i)
        eType = Range("AD" & i)
        'eType = Replace(eType, "java.lang.", "")
        code.add ""
        code.add "    /** " & eNameJp & " */"
        code.add "    private " & eType & " " & eName & " = new " & eType & "();"
        code.add ""
        code.add "    /**"
        code.add "     * " & eNameJp & "を取得する。"
        code.add "     *"
        code.add "     * @return " & eName & " " & eNameJp
        code.add "     */"
        code.add "    public " & eType & " get" & enameU & "() {"
        code.add "        return " & eName & ";"
        code.add "    }"
        code.add ""
        code.add "    /**"
        code.add "     * " & eNameJp & "を設定する。"
        code.add "     *"
        code.add "     * @param " & eName & " " & eNameJp
        code.add "     */"
        code.add "    public void set" & enameU & "(" & eType & " " & eName & ") {"
        code.add "        this." & eName & " = " & eName & ";"
        code.add "    }"
        i = i + 1
    Loop

    code.add "}"

    writeFile "C:\" & fileName, code

End Sub

Private Sub strAdd(ByRef str As String, add As String)
    str = str & add & vbCrLf
End Sub

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值