001 /* 002 * Copyright 2002-2008 the original author or authors. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not 005 * use this file except in compliance with the License. You may obtain a copy of 006 * the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 012 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 013 * License for the specific language governing permissions and limitations under 014 * the License. 015 */ 016 package org.springframework.richclient.command.support; 017 018 import org.springframework.beans.factory.InitializingBean; 019 import org.springframework.richclient.application.ApplicationWindow; 020 import org.springframework.richclient.application.PropertyNotSetException; 021 import org.springframework.richclient.application.View; 022 import org.springframework.richclient.application.ViewDescriptor; 023 import org.springframework.richclient.util.Assert; 024 025 /** 026 * An action command for displaying a {@link View} based on a provided {@link ViewDescriptor}. 027 */ 028 public class ShowViewCommand extends ApplicationWindowAwareCommand implements InitializingBean { 029 030 private ViewDescriptor viewDescriptor; 031 032 /** 033 * Creates a new uninitialized {@code ShowViewCommand}. The {@code applicationWindow} and 034 * {@code viewDescriptor} properties must be set before using the new instance. 035 */ 036 public ShowViewCommand() { 037 //do nothing 038 } 039 040 /** 041 * Creates a new {@code ShowViewCommand} with the given view descriptor and associated 042 * application window. The new instance will have a command identifier equal to the id from 043 * the view descriptor, the command will be enabled by default. 044 * 045 * @param viewDescriptor The object describing the view that this command will be 046 * responsible for showing. 047 * @param applicationWindow The application window that the command belongs to. 048 * 049 * @throw IllegalArgumentException if {@code viewDescriptor} or {@code applicationWindow} are null. 050 */ 051 public ShowViewCommand(ViewDescriptor viewDescriptor, ApplicationWindow applicationWindow) { 052 Assert.required(applicationWindow, "applicationWindow"); 053 setViewDescriptor(viewDescriptor); 054 setApplicationWindow(applicationWindow); 055 setEnabled(true); 056 } 057 058 /** 059 * {@inheritDoc} 060 */ 061 public void afterPropertiesSet() { 062 PropertyNotSetException.throwIfNull(getApplicationWindow(), "applicationWindow", getClass()); 063 PropertyNotSetException.throwIfNull(this.viewDescriptor, "viewDescriptor", getClass()); 064 } 065 066 /** 067 * Sets the descriptor for the view that is to be opened by this command object. This 068 * command object will be assigned the id, label, icon, and caption from the given view 069 * descriptor. 070 * 071 * @param viewDescriptor The view descriptor, cannot be null. 072 * 073 * @throws IllegalArgumentException if {@code viewDescriptor} is null. 074 */ 075 public final void setViewDescriptor(ViewDescriptor viewDescriptor) { 076 Assert.required(viewDescriptor, "viewDescriptor"); 077 setId(viewDescriptor.getId()); 078 setLabel(viewDescriptor.getShowViewCommandLabel()); 079 setIcon(viewDescriptor.getIcon()); 080 setCaption(viewDescriptor.getCaption()); 081 this.viewDescriptor = viewDescriptor; 082 } 083 084 /** 085 * Causes the view described by this instance's view descriptor to be shown. 086 */ 087 protected void doExecuteCommand() { 088 //FIXME getApplicationWindow can potentially return null. This should probably be 089 //made an invariant on the ApplicationWindowAwareCommand, that it never returns null. 090 //Same applies to ApplicationWindow.getPage(), can also return null 091 getApplicationWindow().getPage().showView(this.viewDescriptor.getId()); 092 } 093 094 }