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