二、EMF模型保存时加密
可以通过设置Save Option和Load Option来实现模型保存时加密、加载时解密的过程。例如:
- 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;
- }
- }
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模型改变事件,例如:
- public class ElementObserver {
- private IPersonList persons;
- public ElementObserver() {
- ModelFactory factory = ModelFactory.eINSTANCE;
- persons = factory.createIPersonList();
- Adapter adapter = new AdapterImpl() {
- public void notifyChanged(Notification notification) {
- System.out
- .println("Notfication received from the data model. Data model has changed!!!");
- }
- };
- persons.eAdapters().add(adapter);
- }
- public void doStuff() {
- ModelFactory factory = ModelFactory.eINSTANCE;
- IPerson person = factory.createIPerson();
- person.setFirstName("Lars");
- System.out.println("I'm adding a person.");
- persons.getPersons().add(person);
- System.out.println("I'm changing a entry");
- persons.getPersons().get(0).setFirstName("Lars2");
- }
- }
通过注册Adapter对象persons里,我们可以收到消息如果这个list有增删。
- public class TotalObserver {
- private IPersonList persons;
- public TotalObserver() {
- ModelFactory factory = ModelFactory.eINSTANCE;
- persons = factory.createIPersonList();
- EContentAdapter adapter = new EContentAdapter() {
- public void notifyChanged(Notification notification) {
- super.notifyChanged(notification);
- System.out
- .println("Notfication received from the data model. Data model has changed!!!");
- }
- };
- persons.eAdapters().add(adapter);
- }
- public void doStuff() {
- ModelFactory factory = ModelFactory.eINSTANCE;
- IPerson person = factory.createIPerson();
- person.setFirstName("Lars");
- System.out.println("I'm adding a person.");
- persons.getPersons().add(person);
- System.out.println("I'm changing a entry");
- IPerson person2 = persons.getPersons().get(0);
- person2.setFirstName("Lars2");
- }
- }
通过增加EContentAdapter,我们可以监听到list的增删和其中某个元素有变化。