/** * Copyright (C) 2015 Valkyrie RCP * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.valkyriercp.sample.vldocking.ui; import org.springframework.core.io.Resource; import org.valkyriercp.application.support.AbstractView; import javax.swing.*; import java.awt.*; import java.io.IOException; /** * This class defines the initial view to be presented in the sample application. It is constructed automatically by the * platform and configured according to the bean specification in the application context. Here's an example * configuration: * * <pre> * <bean id="initialView" * class="org.springframework.richclient.application.support.DefaultViewDescriptor"> * <property name="viewClass"> * <value>org.springframework.richclient.samples.simple.ui.InitialView</value> * </property> * <property name="viewProperties"> * <map> * <entry key="firstMessage"> * <value>This is the first message!</value> * </entry> * <entry key="descriptionTextPath"> * <value>org/springframework/richclient/samples/simple/ui/initialViewText.html</value> * </entry> * </map> * </property> * </bean> * </pre> * * Note that the configuration specifies the properties to be set on this class indirectly. The property set on the * {@link org.valkyriercp.application.support.DefaultViewDescriptor} is called <code>viewProperties</code> and it takes a map of key/value pairs. Each key * is the name of a property to be set on the actual view class (this class) and the value is the value to set for that * property. So, two properties have been configured, <code>firstMessage</code> and <code>descriptionTextPath</code>. * The <code>firstMessage</code> value specifies the key of a message to be displayed and the * <code>descriptionTextPath</code> specifies the path to a file containing the text to place in the HTML panel that * makes up the main body of this view. * @author Larry Streepy */ public class InitialView extends AbstractView { private String firstMessage; private Resource descriptionTextPath; public InitialView() { super("initialView"); } /** * @return the firstMessage */ public String getFirstMessage() { return firstMessage; } /** * Set the key to the message to be displayed first in the view * @param firstMessage the firstMessage to set */ public void setFirstMessage(String firstMessage) { this.firstMessage = firstMessage; } /** * @return the descriptionTextPath */ public Resource getDescriptionTextPath() { return descriptionTextPath; } /** * Set the resource that references the file containing the description text to place in the description areas of * this view. Note that even though this property is of type Resource, the Spring platform will automatically * convert a string path into a resource. * @param descriptionTextPath the descriptionTextPath to set */ public void setDescriptionTextPath(Resource descriptionTextPath) { this.descriptionTextPath = descriptionTextPath; } /** * Create the actual UI control for this view. It will be placed into the window according to the layout of the page * holding this view. */ protected JComponent createControl() { // In this view, we're just going to use standard Swing to place a // few controls. // The location of the text to display has been set as a Resource in the // property descriptionTextPath. So, use that resource to obtain a URL // and set that as the page for the text pane. JTextPane textPane = new JTextPane(); JScrollPane spDescription = getApplicationConfig().componentFactory().createScrollPane(textPane); try { textPane.setPage(getDescriptionTextPath().getURL()); } catch (IOException e) { throw new RuntimeException("Unable to load description URL", e); } JLabel lblMessage = getApplicationConfig().componentFactory().createLabel(getFirstMessage()); lblMessage.setBorder(BorderFactory.createEmptyBorder(5, 0, 5, 0)); JPanel panel = getApplicationConfig().componentFactory().createPanel(new BorderLayout()); panel.add(spDescription); panel.add(lblMessage, BorderLayout.SOUTH); return panel; } }