Package com.dhemery.osx

Source Code of com.dhemery.osx.ApplicationBundle

package com.dhemery.osx;

import com.dhemery.core.Builder;
import com.dhemery.core.Lazily;
import com.dhemery.core.Lazy;
import com.dhemery.serializing.GsonJsonInspector;
import com.dhemery.serializing.JsonInspector;
import com.dhemery.os.Shell;

import java.io.File;

/**
* Retrieves information from an application bundle.
* This "inspector" reads information from the bundle's {@code Info.plist} file,
* and also examines the permissions of the bundle's executable file.
*/
public class ApplicationBundle {
    private static final String BUNDLE_VERSION = "CFBundleVersion";
    private static final String BUNDLE_IDENTIFIER = "CFBundleIdentifier";
    private static final String EXECUTABLE_NAME = "CFBundleExecutable";
    private final String path;
    private final Shell shell;
    private final Lazy<JsonInspector> inspector = Lazily.build(inspectorBuilder());

    private Builder<JsonInspector> inspectorBuilder() {
        return new Builder<JsonInspector>() {
            @Override
            public JsonInspector build() {
                String json = new PlutilPlistReader(shell).read(path + "/Info.plist");
                return new GsonJsonInspector(json);
            }
        };
    }

    /**
     * Create an "inspector" that retrieves information from a specified application bundle.
     * @param path the absolute file path to the application bundle.
     */
    public ApplicationBundle(String path, Shell shell) {
        this.path = path;
        this.shell = shell;
    }

    /**
     * The bundle's version.
     */
    public String bundleIdentifier() {
        return json().stringValue(BUNDLE_IDENTIFIER);
    }

    /**
     * The bundle's version.
     */
    public String bundleVersion() {
        return json().stringValue(BUNDLE_VERSION);
    }

    /**
     * The name of the bundle's executable file.
     * This method does not verify that the file exists or that its "executable" bit is set.
     */
    public String executableName() {
        return json().stringValue(EXECUTABLE_NAME);
    }

    /**
     * Report whether the bundle's executable file is executable.
     * The file is executable if it exists and its "executable" bit is set.
     */
    public boolean isExecutable() {
        return new File(pathToExecutable()).canExecute();
    }

    /**
     * The absolute path to the bundle's executable file.
     */
    public String pathToExecutable() {
        return String.format("%s/%s", path, executableName());
    }

    /**
     * A {@link JsonInspector} with the contents of the bundle's Info.plist file.
     */
    public JsonInspector json() {
        return inspector.get();
    }
}
TOP

Related Classes of com.dhemery.osx.ApplicationBundle

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.