EMFオブジェクトへの傍受、暗号化保存の追加


一、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の削除と要素の変化を監視できます.
 
二、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;
	}
}