001: /*
002: * Copyright 2007 Paul Hinds
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.tp23.antinstaller.runtime.exe;
017:
018: import org.tp23.antinstaller.InstallException;
019: import org.tp23.antinstaller.InstallerContext;
020: import org.tp23.antinstaller.renderer.AIResourceBundle;
021: import org.tp23.antinstaller.renderer.swing.LangSelectFrame;
022: import org.tp23.antinstaller.renderer.swing.plaf.LookAndFeelFactory;
023: import org.tp23.antinstaller.renderer.text.LangSelectTextUI;
024:
025: /**
026: * Language Selection filter which runs prior to creating the main UI screens
027: * @author teknopaul
028: *
029: */
030: public class LangSelectFilter implements ExecuteFilter {
031:
032: private static final AIResourceBundle res = new AIResourceBundle();
033: private static final String nextChar = res.getString("next.char");
034:
035: public LangSelectFilter() {
036: }
037:
038: public void exec(InstallerContext ctx) throws InstallException {
039: // this is copy paste from CreateUIFilter
040: // it runs prior to the main decision to use a GUI or TextUI
041: if (ctx.getInstaller().getLangPage() == null) {
042: return;
043: }
044: if (ctx.getUIOverride() != null) {
045: if (ctx.getUIOverride().equalsIgnoreCase("swing")) {
046: if (CreateUIFilter.isUi("swing", ctx.getInstaller()
047: .getUi())) {
048: new LookAndFeelFactory(ctx).setLAF();
049: LangSelectFrame langFrame = new LangSelectFrame();
050: langFrame.init(ctx);
051: } else {
052: throw new InstallException(
053: "Not a permited UI override, swing is not allowed");
054: }
055: }
056:
057: else if (ctx.getUIOverride().equalsIgnoreCase("text")) {
058: if (CreateUIFilter.isUi("text", ctx.getInstaller()
059: .getUi())) {
060: LangSelectTextUI langTextUI = new LangSelectTextUI();
061: langTextUI.init(ctx);
062: } else {
063: throw new InstallException(
064: "Not a permited UI override, text is not allowed");
065: }
066: }
067:
068: else if (ctx.getUIOverride().equalsIgnoreCase("swing-auto")) {
069: if (CreateUIFilter.isUi("swing-auto", ctx
070: .getInstaller().getUi())) {
071: new LookAndFeelFactory(ctx).setLAF();
072: LangSelectFrame langFrame = new LangSelectFrame();
073: langFrame.init(ctx);
074: } else {
075: throw new InstallException(
076: "Not a permited UI override, swing-auto is not allowed");
077: }
078: }
079:
080: else if (ctx.getUIOverride().equalsIgnoreCase("text-auto")) {
081: if (CreateUIFilter.isUi("text-auto", ctx.getInstaller()
082: .getUi())) {
083: // language hardly matters for a text-auto build
084: //LangSelectFrame langFrame = new LangSelectFrame("Select Language"); // TODO customisable
085: //langFrame.init(ctx);
086: } else {
087: throw new InstallException(
088: "Not a permited UI override, text-auto is not allowed");
089: }
090: }
091:
092: }
093: //else do stuff to work out if there is a graphics context
094: else {
095: try {
096: java.awt.GraphicsEnvironment
097: .getLocalGraphicsEnvironment();
098: /*
099: * Above test is not enough to be sure that we can use the graphics env
100: * so do remaining setup within try/catch block
101: */
102: new LookAndFeelFactory(ctx).setLAF();
103: LangSelectFrame langFrame = new LangSelectFrame(); // TODO customisable
104: langFrame.init(ctx);
105: } catch (Throwable e) {
106: System.out
107: .println("No graphics environment available, reverting to text");
108: System.out.println();
109: LangSelectTextUI langTextUI = new LangSelectTextUI();
110: langTextUI.init(ctx);
111: }
112: }
113:
114: }
115:
116: }
|