org.icepdf.ri.viewer.Launcher Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of icepdf-viewer Show documentation
Show all versions of icepdf-viewer Show documentation
ICEpdf PDF Viewer Reference Implementation (RI)
/*
* Copyright 2006-2017 ICEsoft Technologies Canada Corp.
*
* 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.icepdf.ri.viewer;
import org.icepdf.core.util.Defs;
import org.icepdf.ri.common.ViewModel;
import org.icepdf.ri.util.FontPropertiesManager;
import org.icepdf.ri.util.PropertiesManager;
import org.icepdf.ri.util.URLAccess;
import javax.swing.*;
import java.text.MessageFormat;
import java.util.Properties;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* Launches the Viewer Application. The following parameters can be used
* to optionally load a PDF document at startup.
*
*
* Option
* Description
*
*
* -loadfile filename
* Starts the ICEpdf Viewer and displays the specified local PDF file.
* Use the following syntax:
* -loadfile c:/examplepath/file.pdf
*
*
* -loadfile filename
* Starts the ICEpdf Viewer and displays the PDF file at the specified
* URL. Use the following syntax:
* -loadurl http://www.examplesite.com/file.pdf
*
*
*/
public class Launcher {
private static final Logger logger =
Logger.getLogger(Launcher.class.toString());
// manages open windows
public static WindowManager windowManager;
// stores properties used by ICEpdf
private static PropertiesManager propertiesManager;
public static void main(String[] argv) {
boolean brokenUsage = false;
String contentURL = "";
String contentFile = "";
String contentProperties = null;
// parse command line arguments
for (int i = 0; i < argv.length; i++) {
if (i == argv.length - 1) { //each argument requires another
brokenUsage = true;
break;
}
String arg = argv[i];
if (arg.equals("-loadfile")) {
contentFile = argv[++i].trim();
} else if (arg.equals("-loadurl")) {
contentURL = argv[++i].trim();
} else if (arg.equals("-loadproperties")) {
contentProperties = argv[++i].trim();
} else {
brokenUsage = true;
break;
}
}
// load message bundle
ResourceBundle messageBundle = ResourceBundle.getBundle(
PropertiesManager.DEFAULT_MESSAGE_BUNDLE);
// Quit if there where any problems parsing the command line arguments
if (brokenUsage) {
System.out.println(messageBundle.getString("viewer.commandLin.error"));
System.exit(1);
}
// start the viewer
run(contentFile, contentURL, contentProperties, messageBundle);
}
/**
* Starts the viewe application.
*
* @param contentFile URI of a file which will be loaded at runtime, can be
* null.
* @param contentURL URL of a file which will be loaded at runtime, can be
* null.
* @param contentProperties URI of a properties file which will be used in
* place of the default path
* @param messageBundle messageBundle to pull strings from
*/
private static void run(String contentFile,
String contentURL,
String contentProperties,
ResourceBundle messageBundle) {
// initiate the properties manager.
Properties sysProps = System.getProperties();
propertiesManager = new PropertiesManager(sysProps, contentProperties, messageBundle);
// initiate font Cache manager, reads system font data and stores summary
// information in a properties file. If new font are added to the OS
// then the properties file can be deleted to initiate a re-read of the
// font data.
new FontPropertiesManager(propertiesManager, sysProps, messageBundle);
// input new System properties
System.setProperties(sysProps);
// set look & feel
setupLookAndFeel(messageBundle);
ViewModel.setDefaultFilePath(propertiesManager.getDefaultFilePath());
ViewModel.setDefaultURL(propertiesManager.getDefaultURL());
// application instance
windowManager = WindowManager.createInstance(propertiesManager, messageBundle);
if (contentFile != null && contentFile.length() > 0) {
windowManager.newWindow(contentFile);
ViewModel.setDefaultFilePath(contentFile);
}
// load a url if specified
if (contentURL != null && contentURL.length() > 0) {
URLAccess urlAccess = URLAccess.doURLAccess(contentURL);
urlAccess.closeConnection();
if (urlAccess.errorMessage != null) {
// setup a patterned message
Object[] messageArguments = {urlAccess.errorMessage,
urlAccess.urlLocation
};
MessageFormat formatter = new MessageFormat(
messageBundle.getString("viewer.launcher.URLError.dialog.message"));
JOptionPane.showMessageDialog(
null,
formatter.format(messageArguments),
messageBundle.getString("viewer.launcher.URLError.dialog.title"),
JOptionPane.INFORMATION_MESSAGE);
} else {
windowManager.newWindow(urlAccess.url);
}
ViewModel.setDefaultURL(urlAccess.urlLocation);
urlAccess.dispose();
}
// Start an empy viewer if there was no command line parameters
if (((contentFile == null || contentFile.length() == 0) &&
(contentURL == null || contentURL.length() == 0))
|| (windowManager.getNumberOfWindows() == 0)
) {
windowManager.newWindow("");
}
}
/**
* If a L&F has been specifically set then try and use it. If not
* then resort to the 'native' system L&F.
*
* @param messageBundle
*/
private static void setupLookAndFeel(ResourceBundle messageBundle) {
// Do Mac related-setup (if running on a Mac)
if (Defs.sysProperty("mrj.version") != null) {
// Running on a mac
// take the menu bar off the jframe
Defs.setSystemProperty("apple.laf.useScreenMenuBar", "true");
// set the name of the application menu item (must precede the L&F setup)
String appName = messageBundle.getString("viewer.window.title.default");
Defs.setSystemProperty("com.apple.mrj.application.apple.menu.about.name", appName);
}
String className =
propertiesManager.getLookAndFeel("application.lookandfeel",
null);
if (className != null) {
try {
UIManager.setLookAndFeel(className);
return;
} catch (Exception e) {
// setup a patterned message
Object[] messageArguments = {
propertiesManager.getString("application.lookandfeel")
};
MessageFormat formatter = new MessageFormat(
messageBundle.getString("viewer.launcher.URLError.dialog.message"));
// Error - unsupported L&F (probably windows)
JOptionPane.showMessageDialog(
null,
formatter.format(messageArguments),
messageBundle.getString("viewer.launcher.lookAndFeel.error.message"),
JOptionPane.ERROR_MESSAGE);
}
}
try {
String defaultLF = UIManager.getSystemLookAndFeelClassName();
UIManager.setLookAndFeel(defaultLF);
} catch (Exception e) {
logger.log(Level.FINE, "Error setting Swing Look and Feel.", e);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy