Mở rộng InfoSphere Data Architect của IBM để đáp ứng các
yêu cầu mô hình hóa và tích hợp dữ liệu cụ thể của bạn,
Phần 1: Sửa đổi các mô hình của IDA và tùy chỉnh các đặc
tính
InfoSphere Data Architect của IBM (IDA) là một môi trường phát triển toàn diện để mô hình hóa
và tích hợp dữ liệu. IDA cho phép người dùng khám phá, mô hình hóa, hiển thị trực quan và liên
kết các tài sản dữ liệu đa dạng và phân tán. IDA là một quy trình quản lý dữ liệu theo đề xuất của
IBM và được tích hợp chặt chẽ với các sản phẩm Optim®, Rational và InfoSphere được xây
dựng bằng Eclipse. IDA hỗ trợ mô hình hóa dữ liệu logic, vật lý, bảng chú giải, lưu trữ, tên miền
và tích hợp. Khi càng có nhiều khách hàng doanh nghiệp sử dụng IDA, thì càng có thêm nhu cầu
muốn mở rộng IDA để đáp ứng các yêu cầu mô hình hóa và tích hợp dữ liệu duy nhất của họ.
Như đã đề cập trước đó, IDA dựa trên Eclipse và do đó có thể mở rộng rất nhiều bằng thiết kế
của nó. Trong loạt bài này, hãy tìm hiểu thêm về các điểm mở rộng, các API và các nhà máy sẵn
có với IDA mà bạn có thể sử dụng để mở rộng IDA. Xem cách mở rộng IDA để:
Duyệt qua và sửa đổi các mô hình IDA bằng lập trình (Phần 1).
Thêm các đặc tính mới và hiển thị chúng trong khung nhìn Properties (Phần 1).
Tạo các báo cáo mô hình tùy chỉnh (Phần 2)
Thêm các quy tắc xác nhận hợp lệ mô hình (Phần 2)
Bài này giả định bạn có kinh nghiệm phát triển trình cắm thêm Eclipse và có kiến thức cơ bản về
các dự án EMF và BIRT trên Eclipse. Mã mẫu được cung cấp trong bài này được thử nghiệm
trên phiên bản 7.5.1 và 7.5.2 của IDA và trên phiên bản 3.4.1 và 3.4.2 của Eclipse.
Duyệt qua và sửa đổi mô hình dữ liệu logic và mô hình dữ liệu vật lý của IDA bằng lập trình
Thay đổi tên sản phẩm
Ngày 16 tháng 12 năm 2008, IBM đã công bố rằng Phiên bản 7.5.1, Rational Data Architect
(Kiến trúc sư dữ liệu Rational) được đổi tên thành InfoSphere Data Architect nhằm đề cao vai trò
của nó trong các công cụ của Nền tảng InfoSphere (InfoSphere Foundation).
Nếu bạn cần mở rộng IDA, có khả năng là bạn sẽ cần hiểu cấu trúc mô hình của nó để duyệt qua
và sửa đổi các đối tượng mô hình của nó. Phần này cho bạn thấy cách làm điều này bằng cách sử
dụng một mô hình vật lý và các đối tượng của nó. Một cách tiếp cận tương tự cũng có thể được
sử dụng cho các mô hình logic.
Mô hình SQL như là các siêu mô hình của các mô hình IDA
Từ hình này, bạn có thể thấy rằng các cơ sở dữ liệu và các lược đồ có nguồn gốc từ đối tượng
SQL và do đó chúng đều có các đặc tính, ví dụ như tên, mô tả và nhãn. Trên thực tế hầu như tất
cả các đối tượng được mô tả trong mô hình SQL đều được bắt nguồn từ đối tượng SQL và chúng
tự động có các đặc tính tên, mô tả và nhãn. Một đối tượng cơ sở dữ liệu có đặc tính riêng của
mình, ví dụ như nhà cung cấp và phiên bản, là các chuỗi ký tự. Một đối tượng cơ sở dữ liệu có
thể có từ không đến nhiều (0 n) lược đồ và một lược đồ có thể có không đến nhiều (0 n)
bảng, nhiều chỉ mục, nhiều kiểu người dùng được định nghĩa, nhiều thường trình và v.v Bạn có
thể lấy tất cả các bảng và các chỉ mục cho một lược đồ bằng cách gọi schema.getTables(),
schema.getIndices() và getUserDefinedTypes(), tương ứng. Mã mẫu để đọc từ một lược đồ và
lấy các bảng của nó được hiển thị trong Liệt kê 1.
Liệt kê 1. Mã mẫu để duyệt qua một cơ sở dữ liệu và lược đồ và để lấy các đặc tính của
chúng private void TraverseDatabase(Database db) {
System.out.println("Database: " +
db.getName());
System.out.println(" Vendor: " +
db.getVendor());
System.out.println(" Version: "+
db.getVersion());
// get schemas
Iterator schemaItor =
db.getSchemas().iterator();
while(schemaItor.hasNext()) {
Schema aSchema =
(Schema)schemaItor.next();
TraverseSchema(aSchema);
Liệt kê 2 hiển thị mã mẫu để lấy các cột từ một bảng và đọc các đặc tính của chúng.
Liệt kê 2. Mã mẫu để lấy các cột từ một bảng và đọc các đặc tính của chúng private void TraverseTable(Table table) {
System.out.println("Table: " +
table.getName());
// get columns
Iterator columnsItor =
table.getColumns().iterator();
while(columnsItor.hasNext()) {
Column aColumn =
(Column)columnsItor.next();
TraverseColumn(aColumn);
}
}
private void TraverseColumn(Column col) {
System.out.println(" Column: " +
col.getName());
// get column properties
DataType dataType = col.getDataType();
System.out.println(" Data type: "
+ dataType.getName());
boolean isNullable = col.isNullable();
System.out.println(" Is nullable:
" + Boolean.toString(isNullable));
String defaultValue =
col.setName("SSN");
CharacterStringDataType cType =
(CharacterStringDataType) dbDef
.getPredefinedDataType("CHARACTER");
cType.setLength(9);
col.setDataType(cType);
EStructuralFeature feature =
table.eClass().getEStructuralFeature(
SQLTablesPackage.TABLE__COLUMNS);
// using IDA CommandFactory to create a add command
ICommand cmd =
CommandFactory.INSTANCE.createAddCommand(
"Add SSN column", table, feature, col);
// execute the command using IDA command manager
DataToolsPlugin.getDefault().getCommandManager().execute(cmd);
}
Trong phương thức AddSSColumn, mã lấy định nghĩa cơ sở dữ liệu đã đăng ký bằng cách
chuyển các chuỗi ký tự nhà cung cấp và phiên bản cơ sở dữ liệu. Sau đó, mã này sử dụng định
nghĩa cơ sở dữ liệu đã đăng ký được tạo ra trong mã mẫu để lấy nhà máy của phần tử mô hình cơ
sở dữ liệu cụ thể. Cuối cùng, phương thức này tạo một cột bằng cách sử dụng nhà máy của phần
tử mô hình. Nó sử dụng CommandFactory của IDA để tạo ra một lệnh. Phương thức
createAddCommand thêm một đối tượng giá trị vào đối tượng chủ sở hữu bằng cách sử dụng
tính năng đã quy định. Tham khảo API của phương thức createAddCommand là:
public IDataToolsCommand createAddCommand(String label, EObject owner,
EStructuralFeature feature, Object value)
bền trong mô hình.
Tùy chỉnh các thẻ và các phần các đặc tính
Vì có nhiều loại khách hàng sử dụng IDA, nên điều phổ biến là các khách hàng có các yêu cầu
riêng của mình về các đặc tính gắn liền với một số kiểu các đối tượng nhất định. Ví dụ, một công
ty có thể yêu cầu Số An Sinh Xã Hội của nhân viên (SSN) được đánh dấu là riêng tư để tuân thủ
chính sách bí mật dữ liệu riêng tư. Công ty có thể yêu cầu tiền lương và tiền thưởng của nhân
viên được đánh dấu là dữ liệu nhạy cảm để có thể chỉ có một số nhân viên xem được. Bạn có thể
tạo ra các thẻ và các phần riêng của mình để thực hiện việc này dễ dàng. Trong các phần sau, hãy
tìm hiểu cách thêm một thẻ và các phần mới cho các đối tượng cột, như trong Hình 8.
Hình 8. Thẻ riêng tư có tùy chỉnh với dữ liệu riêng tư và các phần phương thức mặt nạ cho
các cột
Ba điểm mở rộng được sử dụng để đóng góp vào khung nhìn các đặc tính có gắn thẻ. Mỗi khung
nhìn các đặc tính có gắn thẻ gồm có một trình đóng góp đặc tính, để đóng góp một hoặc nhiều
thẻ đặc tính. Mỗi thẻ đặc tính gồm một hoặc nhiều phần. Một phần là một tiện ích giao diện
người dùng đồ họa (GUI) hoặc một hỗn hợp có chứa một nhóm các tiện ích ánh xạ tới một hoặc
nhiều đặc tính.
Trình cung cấp đặc tính
Điểm mở rộng org.eclipse.ui.views.properties.tabbed.PropertyContributor được dùng để định
nghĩa mã định danh (ID) duy nhất của Trình cung cấp cho các thẻ và các phần của bạn. Mã định
danh này thường phù hợp với ID duy nhất của phần bàn làm việc, góp phần vào khung nhìn các
đặc tính có gắn thẻ. Một phần bàn làm việc xác định một Trình cung cấp đặc tính riêng lẻ bằng
cách thực hiện các giao diện ITabbedPropertySheetPageContributor.
Như Liệt kê 4 cho thấy, điểm mở rộng này được sử dụng để định nghĩa
com.ibm.datatools.properties như là ID của Trình cung cấp của các thẻ và các phần đặc tính của
IDA, được chia sẻ bởi Data Project Explorer của IDA, Data Source Explorer và Diagrams (Các
sơ đồ). Ngoài ra còn có một trình ánh xạ (mapper) kiểu, một nhà cung cấp nhãn và các thể loại
đặc tính được định nghĩa với điểm mở rộng này. Người dùng IDA không cần làm bất cứ điều gì
với điểm mở rộng này nếu họ sử dụng Data Project Explorer, Data Source Explorer và Diagrams
category— Thể loại từ điểm mở rộng PropertyContributor được dùng cho các thẻ nhóm.
afterTab— ID của thẻ mà thẻ này được đặt sau nó.
image— Ảnh tùy chọn để hiển thị trên thẻ đó.
indented— Giá trị logíc (Boon) để cho biết các thẻ có chỗ thụt lề không.
Mã plugin.xml trong Liệt kê 5 thêm một thẻ Privacy bằng cách sử dụng điểm mở rộng trong
Hình 8.
Liệt kê 5. Sử dụng điểm mở rộng PropertyTabs để thêm một thẻ Privacy
<extension
point="org.eclipse.ui.views.properties.tabbed.propertyTabs">
<propertyTabs
contributorId="com.ibm.datatools.properties">
<propertyTab
label="Privacy"
category="Extended"
id="com.ibm.custome.PrivacyPropertiesTab">
</propertyTab>
</propertyTabs>
</extension> Các phần đặc tính
Điểm mở rộng org.eclipse.ui.views.properties.tabbed.PropertySections mô tả các phần dành cho
một Trình cung cấp. Mỗi phần thuộc về một cấu hình như được xác định bằng mã định danh duy
nhất của Trình cung cấp của nó. Điểm mở rộng PropertySections có thể định nghĩa một hoặc
nhiều phần thông qua thuộc tính PropertySection. Mỗi phần thuộc về một thẻ, khi được xác định
bằng mã định danh duy nhất của thẻ của nó.
Các thuộc tính có thể được định nghĩa bằng cách sử dụng điểm mở rộng này là:
id— ID duy nhất cho thẻ đó.
Tạo tiện ích GUI để hiển thị các đặc tính riêng tư, bao gồm cả một hộp kiểm riêng tư và
một nút điều khiển văn bản mặt nạ (phương thức createControls).
Đọc giá trị đặc tính từ mô hình và hiển thị nó (các phương thức setInput và refresh).
Lưu giá trị đặc tính khi người dùng thay đổi (phương thức onCheckboxSelected và
onLeaveText).
Lưu giữ lâu bền các đặc tính trong mô hình như EAnnotations (phương thức
getMaskingProperty và setMaskingProperty).
Với mã mẫu thực hiện phần đặc tính, Liệt kê 7 cung cấp mẫu mã hoàn chỉnh trong một tệp phụ
(sidefile).