Lấy ràng buộc thời gian từ file xml

Một phần của tài liệu Kiểm tra ràng buộc thời gian sử dụng phương pháp AOP (Trang 53 - 56)

Ràng buộc ở đây gồm thời gian thực hiện max và min, và giống các thông tin khác, trong xml nó được lưu trữ trong 1 thẻ có dạng như sau :

Với thuộc tính tag = “constraint”, thuộc tính value lưu giá trị ràng buộc thời gian. Tôi tạo 1 package riêng để đọc và lưu các giá trị thời gian từ file xml, mã aspect sẽ sử dụng thông tin đã đọc được trong quá trình kiểm tra tính hợp lý thời gian khi chương trình chạy. Trong package chứa lớp chính là ReadtoHashMap để đọc thông tin ràng buộc thời gian từ file xml vào một cấu trúc lưu trữ kiểu HashMap<String, String>.

Hình 5.2 Lớp đọc ràng buộc thời gian.

Trong lớp này cũng sử dụng cấu trúc dữ liệu ánh xạ HashMap như ở máy trạng thái. Key ở đây là tên đầy đủ của phương thức để phân biệt với nhau, nên gồm toàn bộ thông tin : kiểu trả về, tên lớp, tên method, tham số đầu vào. Còn value là giá trị thời gian đọc được trong file xml.

Trong package này cũng có 2 lớp ClassifierRole và ListClassifierRole để đọc thông tin về các lớp của chương trình giống như trong package tạo máy trạng thái.

Do thông tin về thời gian ràng buộc được lưu trữ trong thẻ như hình trên, ta sẽ đọc tuần tự theo các bước như sau :

o Ta sẽ đọc thông tin về lớp trước để dùng ở bước sau, việc này thực hiện qua lớp ListClassifierRole:

ListClassifierRole lCRole = new ListClassifierRole(xmlFile);

o Đọc tất các nút lưu thông tin thông điệp và lưu vào 1 danh sách các node :

NodeList nList = doc.getElementsByTagName("UML:Message");

o Duyệt lần lượt từng node chứa thông tin message. Trong thuộc tính name ta sẽ lấy được tên lớp để cho vào key của Hashmap. Còn tên lớp sẽ lấy nhờ vào danh sách các lớp đã đọc ở bước đầu tiên. Từ đó ghép vào ta có key đầy đủ của một ràng buộc :

Đọc file xml ta thấy thông tin ràng buộc thời gian lưu trong node con mức thứ 2 bên trong nút UML:Message.

NodeList childN = node.getChildNodes();

node = childN.item(1); //chính là node <UML:ModelElement.taggedValue> Tiếp tục đi vào các node con mức tiếp theo:

childN = node.getChildNodes(); //các node có tên <UML:TaggedValue>

Ở mức này có khá nhiều node và ta sẽ duyệt lần lượt các node này để lấy ra node có thuộc tính “tag” là “constraints”. Lấy giá trị của thuộc tính “value” của node đó sẽ được thời gian:

Như vậy lớp này đã đọc ràng buộc thời gian từ xml và lưu vào biến HashMap constraintMap. Và trong khi thực thi mã aspect sẽ lấy thông tin thời gian từ đây để so sánh với thời gian thực hiện phương thức để xem có hợp lệ không.

Hình 5.3 Cài đặt sinh máy trạng thái

Một phần của tài liệu Kiểm tra ràng buộc thời gian sử dụng phương pháp AOP (Trang 53 - 56)