/* * 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.core.pobjects.actions; import org.icepdf.core.pobjects.FileSpecification; import org.icepdf.core.pobjects.LiteralStringObject; import org.icepdf.core.pobjects.Name; import org.icepdf.core.pobjects.StringObject; import org.icepdf.core.util.Library; import java.util.HashMap; /** * <p>The launch action launches an applicaiton or opens or prints a * document.</p> * <br> * <p>There are optional Win which allow for platform specific parameters for * launching the designated application. </p> * * @author ICEsoft Technologies, Inc. * @since 2.6 */ public class LaunchAction extends Action { // file specification or file name. public static final Name FILE_KEY = new Name("F"); // windows specific files properties. public static final Name WIN_KEY = new Name("Win"); // mac specific file properties. public static final Name MAC_KEY = new Name("Mac"); // unix specific file properties. public static final Name UNIX_KEY = new Name("Unix"); // if false the destination document replaces the current. public static final Name NEW_WINDOW_KEY = new Name("NewWindow"); // path to external file, see section 3.10.1 for more details on // resolving paths private String externalFile; private FileSpecification fileSpecification; // new window? private Boolean isNewWindow; // launch parameters specific to Windows. private WindowsLaunchParameters winLaunchParameters; // mac and unix are not defined by the specification and thus not here // either. /** * Creates a new instance of a Action. * * @param l document library. * @param h Action dictionary entries. */ public LaunchAction(Library l, HashMap h) { super(l, h); winLaunchParameters = new WindowsLaunchParameters(); } /** * Gets the applicaiton to be launched or the document to be opened or * printed. This value can either come from the F key entry of the * launch action or the F key of the file specification. * * @return file specification */ public String getExternalFile() { Object value = getObject(FILE_KEY); if (value instanceof StringObject) { externalFile = ((StringObject) value).getDecryptedLiteralString( library.getSecurityManager()); } else if (getFileSpecification() != null) { externalFile = getFileSpecification().getFileSpecification(); } return externalFile; } /** * Sets the external file flag of the action. At this time it is not * possible to set a FileSpecification object but could be added at a later * date if deamed necessary. * * @param externalFile external file path and or name to be associated * with this launch action. */ public void setExternalFile(String externalFile) { StringObject tmp = new LiteralStringObject( externalFile, getPObjectReference(), library.getSecurityManager()); entries.put(FILE_KEY, tmp); this.externalFile = externalFile; } /** * Specifies whether or not a new window should be opend. * * @return true indicates a new window should be used, false otherwise. */ public boolean getNewWindow() { Object value = getObject(NEW_WINDOW_KEY); if (value instanceof Boolean) { isNewWindow = (Boolean) value; } return isNewWindow; } /** * Gets an object which hold the windows-specific launch parameters. * * @return window specific launch parameters. */ public WindowsLaunchParameters getWinLaunchParameters() { return winLaunchParameters; } /** * Gets the file specification of the destination file. This objects should * be interigated to deside what should be done * * @return file specification, maybe nukll if external file was specified. */ public FileSpecification getFileSpecification() { Object value = getObject(FILE_KEY); if (value instanceof HashMap) { fileSpecification = new FileSpecification(library, (HashMap) value); } return fileSpecification; } /** * <p>Paramaters specific to launching files on windows. These parameters * specify what application should load the file as well what any special * load commands.</p> * * @since 2.6 */ public class WindowsLaunchParameters { private final Name FILE_KEY = new Name("F"); private final Name DIRECTORY_KEY = new Name("D"); private final Name OPEN_KEY = new Name("O"); private final Name PARAMETER_KEY = new Name("P"); private FileSpecification launchFileSpecification; private String launchFile; // default directory in standard dos syntax private String defaultDirectory; // open or print private String operation; // launch parameters private String parameters; /** * Creates a new instance of a Action. */ public WindowsLaunchParameters() { // HashMap winLaunch = library.getDictionary(entries, "Win"); Object value = getObject(FILE_KEY); if (value instanceof HashMap) { launchFileSpecification = new FileSpecification(library, (HashMap) value); } else if (value instanceof StringObject) { launchFile = ((StringObject) value).getDecryptedLiteralString( library.getSecurityManager()); } value = getObject(DIRECTORY_KEY); if (value instanceof StringObject) { defaultDirectory = ((StringObject) value) .getDecryptedLiteralString(library.getSecurityManager()); } value = getObject(OPEN_KEY); if (value instanceof StringObject) { operation = ((StringObject) value) .getDecryptedLiteralString(library.getSecurityManager()); } value = getObject(PARAMETER_KEY); if (value instanceof StringObject) { parameters = ((StringObject) value) .getDecryptedLiteralString(library.getSecurityManager()); } } /** * Gets the file name of the application to be launched or the document * to be opened or printed, in standard Windows pathname format. * * @return fiel or application to launch */ public String getLaunchFile() { return launchFile; } /** * Gets a string specifying the default directory in standard DOS * syntax(Optional). * * @return default directory. */ public String getDefaultDirectory() { return defaultDirectory; } /** * Indicates the operation to perform (Optional). * * @return opertation to perform, either "open" or "print". */ public String getOperation() { return operation; } /** * Gets a parameter string to be passed to the application designated by * the fileName entry.(Optional). * * @return paramater string associated with this action */ public String getParameters() { return parameters; } /** * Gets the file specification of the destination file. This objects should * be interigated to deside what should be done * * @return file specification, maybe nukll if external file was specified. */ public FileSpecification getLaunchFileSpecification() { return launchFileSpecification; } } }