• R/O
  • SSH
  • HTTPS

ea2ddl: コミット


コミットメタ情報

リビジョン106 (tree)
日時2010-10-22 20:59:13
作者taktos9

ログメッセージ

Release ea2xmi-0.0.3

変更サマリ

差分

--- tags/ea2xmi-0.0.3/ea2xmi/EaConnect.cpp (nonexistent)
+++ tags/ea2xmi-0.0.3/ea2xmi/EaConnect.cpp (revision 106)
@@ -0,0 +1,196 @@
1+#include "StdAfx.h"
2+#include "EaConnect.h"
3+
4+using namespace EA2XMI;
5+
6+BSTR EaConnect::GetFirstPackageName(LPCTSTR packageTree) {
7+ UINT fulllen = _tcslen(packageTree);
8+ LPCTSTR child = _tcschr(packageTree, _T('/'));
9+ LPTSTR first;
10+ if (child) {
11+ UINT childlen = _tcslen(child);
12+
13+ first = new _TCHAR[fulllen - childlen + 1];
14+ _tcsncpy_s(first, fulllen - childlen + 1, packageTree, fulllen - childlen);
15+ } else {
16+ first = new _TCHAR[fulllen + 1];
17+ _tcscpy_s(first, fulllen + 1, packageTree);
18+ }
19+#ifdef _DEBUG
20+ _tprintf_s(_T("in->%s, out->%s\n"), packageTree, first);
21+#endif
22+ BSTR rtn = SysAllocString(first);
23+ delete first;
24+ return rtn;
25+}
26+
27+void EaConnect::ShowErrorMessage(HRESULT hr, DWORD dwMessageId) {
28+ LPVOID lpMsgBuf = NULL;
29+ LPVOID lpComMsgBuf = NULL;
30+ if (dwMessageId) {
31+ FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS
32+ , NULL, dwMessageId, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL);
33+ }
34+ if (FAILED(hr)) {
35+ FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS
36+ , NULL, hr, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpComMsgBuf, 0, NULL);
37+ }
38+
39+ _tprintf_s(_T("COM Error: %#x %sWin Error: %d %s\n"), hr, lpComMsgBuf, dwMessageId, lpMsgBuf);
40+ LocalFree(lpMsgBuf);
41+ LocalFree(lpComMsgBuf);
42+}
43+
44+EaConnect::EaConnect(void)
45+{
46+}
47+
48+
49+EaConnect::~EaConnect(void)
50+{
51+}
52+
53+HRESULT EaConnect::Open(LPCTSTR eap) {
54+ HRESULT hr = E_FAIL;
55+
56+ if (FAILED(hr = CoCreateInstance(CLSID_Repository, NULL, CLSCTX_LOCAL_SERVER, IID_IDualRepository, (LPVOID *) &_pRepo))) {
57+ ShowErrorMessage(hr, GetLastError());
58+ return hr;
59+ }
60+
61+ BSTR filepath = SysAllocString(eap);
62+ VARIANT_BOOL pRet = FALSE;
63+ if (FAILED(hr = _pRepo->OpenFile(filepath, &pRet))) {
64+ ShowErrorMessage(hr, GetLastError());
65+ }
66+ SysFreeString(filepath);
67+ return hr;
68+}
69+
70+HRESULT EaConnect::Close(void) {
71+ HRESULT hr = S_OK;
72+ if (_pRepo) {
73+ _pRepo->CloseFile();
74+ hr = _pRepo->Exit();
75+ }
76+ return hr;
77+}
78+
79+HRESULT EaConnect::ExportXML(LPCTSTR package, LPCTSTR output) {
80+ HRESULT hr = S_OK;
81+
82+ BSTR guid;
83+ if (FAILED(hr = GetGUIDOfPackage(package, &guid))) {
84+ return hr;
85+ }
86+
87+ IDualProject *pProj;
88+ if (FAILED(hr = _pRepo->GetProjectInterface(&pProj))) {
89+ ShowErrorMessage(hr, GetLastError());
90+ SysFreeString(guid);
91+ return hr;
92+ }
93+
94+ BSTR xmlGUID;
95+ pProj->GUIDtoXML(guid, &xmlGUID);
96+ SysFreeString(guid);
97+
98+ BSTR outputFile = SysAllocString(output);
99+ BSTR pRet = NULL;
100+ if (FAILED(hr = pProj->ExportPackageXMI(xmlGUID, xmiEADefault, 0, -1, 1, 1, outputFile, &pRet))) {
101+ ShowErrorMessage(hr, GetLastError());
102+ }
103+ _tprintf_s(_T("%s\n"), pRet);
104+ SysFreeString(xmlGUID);
105+ SysFreeString(outputFile);
106+ SysFreeString(pRet);
107+ pProj->Release();
108+ return hr;
109+}
110+
111+HRESULT EaConnect::GetGUIDOfPackage(LPCTSTR package, BSTR* guid) {
112+ HRESULT hr = S_OK;
113+ BSTR e = NULL;
114+ IDualCollection* pPackages;
115+
116+ if (FAILED(hr = _pRepo->get_Models(&pPackages))) {
117+ ShowErrorMessage(hr, GetLastError());
118+ return hr;
119+ }
120+
121+ short count = 0;
122+ if (FAILED(hr = pPackages->get_Count(&count))) {
123+ ShowErrorMessage(hr, GetLastError());
124+ return hr;
125+ }
126+
127+ IDualPackage *pTarget = NULL;
128+ for (int i = 0; i < count; i++) {
129+ IDispatch *pRet;
130+ if (FAILED(hr = pPackages->GetAt(i, &pRet))) {
131+ ShowErrorMessage(hr, GetLastError());
132+ return hr;
133+ }
134+ IDualPackage *pPackage;
135+ if (FAILED(hr = pRet->QueryInterface(IID_IDualPackage, (void **) &pPackage))) {
136+ ShowErrorMessage(hr, GetLastError());
137+
138+ pRet->Release();
139+ return hr;
140+ }
141+ pRet->Release();
142+
143+ if (FAILED(hr = SearchPackage(pPackage, package, &pTarget))) {
144+ _tprintf_s(_T("パッケージが見つかりません:%s (ErrorCode %#x)\n"), package, hr);
145+
146+ pPackage->Release();
147+ return hr;
148+ }
149+ pPackage->Release();
150+
151+ if (pTarget) break;
152+ }
153+
154+ if (pTarget) {
155+ if (FAILED(hr = pTarget->get_PackageGUID(guid))) {
156+ ShowErrorMessage(hr, GetLastError());
157+ }
158+ pTarget->Release();
159+ }
160+ return hr;
161+}
162+
163+HRESULT EaConnect::SearchPackage(IDualPackage* pPackage, LPCTSTR searchPath, IDualPackage** target) {
164+ HRESULT hr = S_OK;
165+ IDualCollection* pPackages;
166+ if (FAILED(hr = pPackage->get_Packages(&pPackages))) {
167+ return hr;
168+ }
169+
170+ BSTR name = GetFirstPackageName(searchPath);
171+ IDispatch *pRet;
172+ if (FAILED(hr = pPackages->GetByName(name, &pRet))) {
173+ SysFreeString(name);
174+ pPackages->Release();
175+ return hr;
176+ }
177+ SysFreeString(name);
178+
179+ IDualPackage *pChild;
180+ if (FAILED(hr = pRet->QueryInterface(IID_IDualPackage, (void **) &pChild))) {
181+ ShowErrorMessage(hr, GetLastError());
182+
183+ pPackage->Release();
184+ pRet->Release();
185+ return hr;
186+ }
187+
188+ // searchPathに子階層が残っていたら再帰する
189+ LPCTSTR child = _tcschr(searchPath, '/');
190+ if (child) {
191+ return SearchPackage(pChild, child + 1, target);
192+ } else {
193+ *target = pChild;
194+ return hr;
195+ }
196+}
--- tags/ea2xmi-0.0.3/ea2xmi/EaConnect.h (nonexistent)
+++ tags/ea2xmi-0.0.3/ea2xmi/EaConnect.h (revision 106)
@@ -0,0 +1,24 @@
1+#pragma once
2+
3+#import "C:\Program Files\SparxSystems Japan\EA\EA.tlb" no_namespace named_guids raw_interfaces_only
4+
5+namespace EA2XMI {
6+ class EaConnect {
7+ private:
8+ IDualRepositoryPtr _pRepo;
9+ BSTR GetFirstPackageName(LPCTSTR package);
10+ void ShowErrorMessage(HRESULT hr, DWORD dwMessageId);
11+
12+ public:
13+ EaConnect(void);
14+ ~EaConnect(void);
15+
16+ HRESULT Open(LPCTSTR eap);
17+ HRESULT Close();
18+
19+ HRESULT ExportXML(LPCTSTR package, LPCTSTR output);
20+ HRESULT GetGUIDOfPackage(LPCTSTR package, BSTR* guid);
21+ HRESULT SearchPackage(IDualPackage *package, LPCTSTR searchPath, IDualPackage **target);
22+ };
23+
24+}
--- tags/ea2xmi-0.0.3/ea2xmi/stdafx.h (nonexistent)
+++ tags/ea2xmi-0.0.3/ea2xmi/stdafx.h (revision 106)
@@ -0,0 +1,17 @@
1+// stdafx.h : 標準のシステム インクルード ファイルのインクルード ファイル、または
2+// 参照回数が多く、かつあまり変更されない、プロジェクト専用のインクルード ファイル
3+// を記述します。
4+//
5+
6+#pragma once
7+
8+#include "targetver.h"
9+
10+#include <stdio.h>
11+#include <tchar.h>
12+
13+
14+
15+// TODO: プログラムに必要な追加ヘッダーをここで参照してください。
16+#include <Windows.h>
17+#include <locale.h>
--- tags/ea2xmi-0.0.3/ea2xmi/ea2xmi.cpp (nonexistent)
+++ tags/ea2xmi-0.0.3/ea2xmi/ea2xmi.cpp (revision 106)
@@ -0,0 +1,51 @@
1+// ea2xmi.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
2+//
3+
4+#include "stdafx.h"
5+#include "EaConnect.h"
6+
7+using namespace EA2XMI;
8+
9+void PrintUsage() {
10+ _tprintf(_T("Usage: EaWin32.exe [in.eap] [SearchPath] [out.xml]\n"));
11+}
12+
13+BOOL CheckArg(int argc, _TCHAR* argv[], LPTSTR* in, LPTSTR *searchPath, LPTSTR* out) {
14+ if (argc <= 3) {
15+ PrintUsage();
16+ return FALSE;
17+ }
18+ *in = argv[1];
19+ *searchPath = argv[2];
20+ *out = argv[3];
21+ return TRUE;
22+}
23+
24+int _tmain(int argc, _TCHAR* argv[])
25+{
26+ _tsetlocale(LC_ALL, _T(""));
27+
28+ LPTSTR in, searchPath, out;
29+ if (!CheckArg(argc, argv, &in, &searchPath, &out)) {
30+ return 1;
31+ }
32+
33+ ::CoInitialize(NULL);
34+
35+ HRESULT hr = FALSE;
36+ EaConnect* con = new EaConnect();
37+ if (SUCCEEDED(hr = con->Open(in))) {
38+ if (FAILED(hr = con->ExportXML(searchPath, out))) {
39+ _tprintf_s(_T("XMIファイルの出力が失敗しました ErrorCode:%#x\n"), hr);
40+ } else {
41+ _tprintf_s(_T("XMIファイルを出力しました[%s]\n"), out);
42+ }
43+ con->Close();
44+ }
45+ delete con;
46+ con = NULL;
47+
48+ CoUninitialize();
49+
50+ return 0;
51+}
--- tags/ea2xmi-0.0.3/ea2xmi/targetver.h (nonexistent)
+++ tags/ea2xmi-0.0.3/ea2xmi/targetver.h (revision 106)
@@ -0,0 +1,8 @@
1+#pragma once
2+
3+// SDKDDKVer.h をインクルードすると、利用できる最も上位の Windows プラットフォームが定義されます。
4+
5+// 以前の Windows プラットフォーム用にアプリケーションをビルドする場合は、WinSDKVer.h をインクルードし、
6+// SDKDDKVer.h をインクルードする前に、サポート対象とするプラットフォームを示すように _WIN32_WINNT マクロを設定します。
7+
8+#include <SDKDDKVer.h>
--- tags/ea2xmi-0.0.3/ea2xmi/stdafx.cpp (nonexistent)
+++ tags/ea2xmi-0.0.3/ea2xmi/stdafx.cpp (revision 106)
@@ -0,0 +1,8 @@
1+// stdafx.cpp : 標準インクルード ea2xmi.pch のみを
2+// 含むソース ファイルは、プリコンパイル済みヘッダーになります。
3+// stdafx.obj にはプリコンパイル済み型情報が含まれます。
4+
5+#include "stdafx.h"
6+
7+// TODO: このファイルではなく、STDAFX.H で必要な
8+// 追加ヘッダーを参照してください。
--- tags/ea2xmi-0.0.3/ea2xmi/ReadMe.txt (nonexistent)
+++ tags/ea2xmi-0.0.3/ea2xmi/ReadMe.txt (revision 106)
@@ -0,0 +1,45 @@
1+========================================================================
2+ コンソール アプリケーション: ea2xmi プロジェクトの概要
3+========================================================================
4+
5+この ea2xmi アプリケーションは、AppWizard により作成されました。
6+
7+このファイルには、ea2xmi
8+アプリケーションを構成する各ファイルの内容の概要が含まれています。
9+
10+
11+ea2xmi.vcxproj
12+ これは、アプリケーション ウィザードを使用して生成された VC++
13+ プロジェクトのメイン プロジェクト ファイルです。
14+ ファイルを生成した Visual C++ のバージョンに関する情報と、アプリケーション
15+ ウィザードで選択されたプラットフォーム、
16+ 構成、およびプロジェクト機能に関する情報が含まれています。
17+
18+ea2xmi.vcxproj.filters
19+ これは、アプリケーション ウィザードで生成された VC++ プロジェクトのフィルター
20+ ファイルです。
21+ このファイルには、プロジェクト内のファイルとフィルターとの間の関連付けに関する
22+ 情報が含まれています。 この関連付けは、特定のノー
23+ ドで同様の拡張子を持つファイルのグループ化を
24+ 示すために IDE で使用されます (たとえば、".cpp" ファイルは "ソース ファイル"
25+ フィルターに関連付けられています)。
26+
27+ea2xmi.cpp
28+ これは、メインのアプリケーション ソース ファイルです。
29+
30+/////////////////////////////////////////////////////////////////////////////
31+その他の標準ファイル :
32+
33+StdAfx.h、StdAfx.cpp
34+ これらのファイルは、ea2xmi.pch
35+ という名前のプリコンパイル済みヘッダー (PCH) ファイルと、StdAfx.obj
36+ という名前のプリコンパイル済みの型ファイルを構築するために使用されます。
37+
38+/////////////////////////////////////////////////////////////////////////////
39+その他のメモ :
40+
41+AppWizard では "TODO:"
42+コメントを使用して、ユーザーが追加またはカスタマイズする必要のあるソース
43+コードを示します。
44+
45+/////////////////////////////////////////////////////////////////////////////
旧リポジトリブラウザで表示