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.application.support; 017 018 import java.awt.Image; 019 import java.awt.Window; 020 import java.beans.PropertyChangeListener; 021 022 import javax.swing.Icon; 023 import javax.swing.JComponent; 024 025 import org.springframework.richclient.application.PageComponentContext; 026 import org.springframework.richclient.application.PageComponentDescriptor; 027 import org.springframework.richclient.application.View; 028 import org.springframework.richclient.application.statusbar.StatusBar; 029 import org.springframework.richclient.command.CommandManager; 030 import org.springframework.richclient.factory.AbstractControlFactory; 031 import org.springframework.util.Assert; 032 033 public abstract class AbstractView extends AbstractControlFactory implements View { 034 private PageComponentDescriptor descriptor; 035 036 private PageComponentContext context; 037 038 public void setDescriptor(PageComponentDescriptor descriptor) { 039 Assert.notNull(descriptor, "The view descriptor is required"); 040 Assert.state(this.descriptor == null, "A view's descriptor may only be set once"); 041 this.descriptor = descriptor; 042 } 043 044 public final void setContext(PageComponentContext context) { 045 Assert.notNull(context, "This view's page component context is required"); 046 Assert.state(this.context == null, "A view's context may only be set once"); 047 this.context = context; 048 registerLocalCommandExecutors(context); 049 } 050 051 public String getId() { 052 return getDescriptor().getId(); 053 } 054 055 public PageComponentDescriptor getDescriptor() { 056 Assert.state(descriptor != null, "View descriptor property is not set; it is required"); 057 return descriptor; 058 } 059 060 public PageComponentContext getContext() { 061 return context; 062 } 063 064 public void componentOpened() { 065 } 066 067 public void componentClosed() { 068 } 069 070 public void componentFocusGained() { 071 } 072 073 public void componentFocusLost() { 074 } 075 076 public String getCaption() { 077 return getDescriptor().getCaption(); 078 } 079 080 public String getDescription() { 081 return getDescriptor().getDescription(); 082 } 083 084 public String getDisplayName() { 085 return getDescriptor().getDisplayName(); 086 } 087 088 public Icon getIcon() { 089 return getDescriptor().getIcon(); 090 } 091 092 public Image getImage() { 093 return getDescriptor().getImage(); 094 } 095 096 protected final Window getWindowControl() { 097 return getContext().getWindow().getControl(); 098 } 099 100 protected final CommandManager getWindowCommandManager() { 101 return context.getWindow().getCommandManager(); 102 } 103 104 protected final StatusBar getStatusBar() { 105 return context.getWindow().getStatusBar(); 106 } 107 108 protected abstract JComponent createControl(); 109 110 /** 111 * Template method called once when this view is initialized; allows subclasses to register local executors for 112 * shared commands with the view context. 113 * 114 * @param context 115 * the view context 116 */ 117 protected void registerLocalCommandExecutors(PageComponentContext context) { 118 119 } 120 121 public void addPropertyChangeListener(PropertyChangeListener listener) { 122 getDescriptor().addPropertyChangeListener(listener); 123 } 124 125 public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { 126 getDescriptor().addPropertyChangeListener(propertyName, listener); 127 } 128 129 public void removePropertyChangeListener(PropertyChangeListener listener) { 130 getDescriptor().removePropertyChangeListener(listener); 131 } 132 133 public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { 134 getDescriptor().removePropertyChangeListener(propertyName, listener); 135 } 136 137 public void dispose() { 138 139 } 140 141 public boolean canClose() { 142 return true; 143 } 144 145 public void close() { 146 context.getPage().close(this); 147 } 148 149 /** 150 * {@inheritDoc} 151 * 152 * This implementation does nothing. 153 */ 154 public void setInput(Object input) { 155 156 } 157 }