001 /*
002 * Copyright 2002-2004 the original author or authors.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of 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,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.springframework.richclient.application.setup;
017
018 import java.io.BufferedReader;
019 import java.io.IOException;
020 import java.io.InputStreamReader;
021
022 import javax.swing.JComponent;
023 import javax.swing.JScrollPane;
024
025 import org.springframework.core.io.Resource;
026 import org.springframework.richclient.command.CommandGroup;
027 import org.springframework.richclient.command.ToggleCommand;
028 import org.springframework.richclient.layout.GridBagLayoutBuilder;
029 import org.springframework.richclient.text.HtmlPane;
030 import org.springframework.richclient.util.LabelUtils;
031 import org.springframework.richclient.wizard.AbstractWizardPage;
032 import org.springframework.richclient.wizard.WizardPage;
033 import org.springframework.util.Assert;
034 import org.springframework.util.FileCopyUtils;
035
036 /**
037 * A {@link WizardPage} which shows a license text and confirmation radio
038 * buttons at the bottom. The license text can be set by
039 * {@link #setLicenseTextLocation(Resource)}.
040 *
041 * @author Claudio Romano
042 */
043 public class SetupLicenseWizardPage extends AbstractWizardPage {
044 /** Pane holding the license text. */
045 private HtmlPane licenseTextPane;
046
047 /** The license text. */
048 private Resource licenseTextLocation;
049
050 /**
051 * Default constructor. License Resource can be added later.
052 */
053 public SetupLicenseWizardPage() {
054 this(null);
055 }
056
057 /**
058 * Convenience constructor which sets the license resource.
059 *
060 * @see #setLicenseTextLocation(Resource)
061 */
062 public SetupLicenseWizardPage(Resource licenseTextLocation) {
063 super("license");
064 setLicenseTextLocation(licenseTextLocation);
065 }
066
067 /**
068 * Set the {@link Resource} to use as license text.
069 */
070 public final void setLicenseTextLocation(Resource location) {
071 this.licenseTextLocation = location;
072 if (licenseTextPane != null) {
073 updateLicenseTextPane();
074 }
075 }
076
077 /**
078 * {@inheritDoc}
079 */
080 protected JComponent createControl() {
081 initLicenseTextPane();
082
083 ToggleCommand acceptCommand = new ToggleCommand("acceptLicenseCommand") {
084 protected void onSelection() {
085 SetupLicenseWizardPage.this.setEnabled(true);
086 }
087 };
088
089 ToggleCommand doNotAcceptCommand = new ToggleCommand("doNotAcceptLicenseCommand") {
090 protected void onSelection() {
091 SetupLicenseWizardPage.this.setEnabled(false);
092 }
093 };
094 doNotAcceptCommand.setSelected(true);
095
096 CommandGroup.createExclusiveCommandGroup(new ToggleCommand[] { acceptCommand, doNotAcceptCommand });
097
098 GridBagLayoutBuilder formBuilder = new GridBagLayoutBuilder();
099 formBuilder.append(new JScrollPane(licenseTextPane), 1, 1, true, true);
100 formBuilder.nextLine();
101 formBuilder.append(acceptCommand.createRadioButton());
102 formBuilder.nextLine();
103 formBuilder.append(doNotAcceptCommand.createRadioButton());
104 return formBuilder.getPanel();
105 }
106
107 /**
108 * Create the html pane and update its contents.
109 */
110 protected void initLicenseTextPane() {
111 this.licenseTextPane = new HtmlPane();
112 updateLicenseTextPane();
113 }
114
115 /**
116 * Updates the text in the html pane.
117 */
118 private void updateLicenseTextPane() {
119 try {
120 Assert.state(licenseTextLocation != null, "License text location is not set");
121 String text = FileCopyUtils.copyToString(new BufferedReader(new InputStreamReader(licenseTextLocation
122 .getInputStream())));
123 licenseTextPane.setText(LabelUtils.htmlBlock(text));
124 }
125 catch (IOException e) {
126 final IllegalStateException exp = new IllegalStateException("License text not accessible: "
127 + e.getMessage());
128 exp.setStackTrace(e.getStackTrace());
129 throw exp;
130 }
131 }
132
133 }