리턴값 변형 시키기 - TheOpenCloudEngine/metaworks GitHub Wiki

리턴 객체를 Popup 시키기

ServiceMethod 어노테이션의 target 옵션을 다르게 주면 팝업을 유도할 수 있다. 팝업되는 객체를 모달윈도우나 작은 Popup 등으로 포장하여 뛰우기 위해서는 관련한 팝업 컴포넌트들을 사용해야 한다.

public class Selection {
    String contentClassName;
	@Id
		public String getContentClassName() {
			return contentClassName;
		}
		public void setContentClassName(String contentClassName) {
			this.contentClassName = contentClassName;
		}
		
	@ServiceMethod(target=ServiceMethod.TARGET_POPUP)
	public ModalWindow select() throws InstantiationException, IllegalAccessException, ClassNotFoundException{
		ModalWindow modalWindow = new ModalWindow();
		modalWindow.setPanel(Class.forName("org.metaworks.example.navigation." + getContentClassName()).newInstance());
 
		return modalWindow;
	}
	
}

리턴 객체의 타입 변경에 의한 모델의 깨짐을 방지하는 방법

MetaworksRemoteService.wrapReturn 을 통하여 도메인 모델을 유지한채로 UI 래핑과 관련한 추가 코드를 주입할 수 있다. 예제는 UI가 없는 테스트 코드 등에서의 select() 메서드가 도메인 객체인 Content 를 그대로 리턴할 수 있도록 하여 도메인 모델의 의미(Semantic)를 유지할 수 있도록 해준다.

	@ServiceMethod(target=ServiceMethod.TARGET_POPUP)
	public Content select() throws InstantiationException, IllegalAccessException, ClassNotFoundException{

		Content content = (Content)Class.forName("org.metaworks.example.navigation." + getContentClassName()).newInstance();

		ModalWindow modalWindow = new ModalWindow();
		modalWindow.setPanel(content);
		MetaworksRemoteService.wrapReturn( modalWindow );

		return content;
	}