EMF模型保存时加密

二、EMF模型保存时加密

 

可以通过设置Save Option和Load Option来实现模型保存时加密、加载时解密的过程。例如:

Java代码   收藏代码
  1. public class MyXMIFactoryImpl extends XMIResourceFactoryImpl {  
  2.   
  3.     @Override  
  4.     public Resource createResource(URI uri) {  
  5.         XMIResourceFactoryImpl resFactory = new XMIResourceFactoryImpl();  
  6.         XMIResource resource = (XMIResource) resFactory.createResource(uri);  
  7.         try {  
  8.             resource.getDefaultLoadOptions().put(Resource.OPTION_CIPHER,  
  9.                     new AESCipherImpl("12345"));  
  10.             resource.getDefaultSaveOptions().put(Resource.OPTION_CIPHER,  
  11.                     new AESCipherImpl("12345"));  
  12.         } catch (Exception e) {  
  13.             e.printStackTrace();  
  14.         }  
  15.         return resource;  
  16.     }  
  17. }  
public class MyXMIFactoryImpl extends XMIResourceFactoryImpl {

	@Override
	public Resource createResource(URI uri) {
		XMIResourceFactoryImpl resFactory = new XMIResourceFactoryImpl();
		XMIResource resource = (XMIResource) resFactory.createResource(uri);
		try {
			resource.getDefaultLoadOptions().put(Resource.OPTION_CIPHER,
					new AESCipherImpl("12345"));
			resource.getDefaultSaveOptions().put(Resource.OPTION_CIPHER,
					new AESCipherImpl("12345"));
		} catch (Exception e) {
			e.printStackTrace();
		}
		return resource;
	}
}

 


一、可以注册监听来获取EMF模型改变事件,例如:

 

Java代码   收藏代码
  1. public class ElementObserver {  
  2.     private IPersonList persons;  
  3.   
  4.     public ElementObserver() {  
  5.         ModelFactory factory = ModelFactory.eINSTANCE;  
  6.         persons = factory.createIPersonList();  
  7.   
  8.         Adapter adapter = new AdapterImpl() {  
  9.             public void notifyChanged(Notification notification) {  
  10.                 System.out  
  11.                         .println("Notfication received from the data model. Data model has changed!!!");  
  12.             }  
  13.         };  
  14.         persons.eAdapters().add(adapter);  
  15.     }  
  16.   
  17.     public void doStuff() {  
  18.         ModelFactory factory = ModelFactory.eINSTANCE;  
  19.         IPerson person = factory.createIPerson();  
  20.         person.setFirstName("Lars");  
  21.         System.out.println("I'm adding a person.");  
  22.         persons.getPersons().add(person);  
  23.         System.out.println("I'm changing a entry");  
  24.         persons.getPersons().get(0).setFirstName("Lars2");  
  25.     }  
  26. }  

 

通过注册Adapter对象persons里,我们可以收到消息如果这个list有增删。

 

Java代码   收藏代码
  1. public class TotalObserver {  
  2.     private IPersonList persons;  
  3.   
  4.     public TotalObserver() {  
  5.         ModelFactory factory = ModelFactory.eINSTANCE;  
  6.         persons = factory.createIPersonList();  
  7.   
  8.         EContentAdapter adapter = new EContentAdapter() {  
  9.             public void notifyChanged(Notification notification) {  
  10.                 super.notifyChanged(notification);  
  11.                 System.out  
  12.                         .println("Notfication received from the data model. Data model has changed!!!");  
  13.             }  
  14.         };  
  15.         persons.eAdapters().add(adapter);  
  16.     }  
  17.   
  18.     public void doStuff() {  
  19.         ModelFactory factory = ModelFactory.eINSTANCE;  
  20.         IPerson person = factory.createIPerson();  
  21.         person.setFirstName("Lars");  
  22.         System.out.println("I'm adding a person.");  
  23.         persons.getPersons().add(person);  
  24.         System.out.println("I'm changing a entry");  
  25.         IPerson person2 = persons.getPersons().get(0);  
  26.         person2.setFirstName("Lars2");  
  27.   
  28.     }  
  29. }  

 

通过增加EContentAdapter,我们可以监听到list的增删和其中某个元素有变化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值