com.agynamix.platform.infra.PlatformUtils.java Source code

Java tutorial

Introduction

Here is the source code for com.agynamix.platform.infra.PlatformUtils.java

Source

/*
 * Copyright by AGYNAMIX(R). All rights reserved. 
 * This file is made available under the terms of the
 * license this product is released under.
 * 
 * For details please see the license file you should have
 * received, or go to:
 * 
 * http://www.agynamix.com
 * 
 * Contributors: agynamix.com (http://www.agynamix.com)
 */
package com.agynamix.platform.infra;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.action.IContributionManager;
import org.eclipse.jface.action.IStatusLineManager;
import org.eclipse.jface.action.SubStatusLineManager;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.dialogs.MessageDialogWithToggle;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.MessageBox;

import com.agynamix.platform.frontend.dialogs.ExceptionDetailsDialog;
import com.agynamix.platform.frontend.preferences.IPreferenceConstants;

public class PlatformUtils {

    public enum OS {
        unknown("Unknown", "Unknown"), win32("Windows", "x86"), win64(new String[] { "Windows" },
                new String[] { "x86_64", "amd64" }), macosx(new String[] { "Mac OS X" },
                        new String[] { "i386", "ppc" }), macosx64("Mac OS X", "x86_64"), linux_x86("Linux",
                                "i386"), linux_x86_64(new String[] { "Linux" },
                                        new String[] { "x86_64", "amd64" }), solaris_x86("SunOS", "x86");

        final List<String> osname = new ArrayList<String>();
        final List<String> osarch = new ArrayList<String>();

        OS(String osname, String osarch) {
            this.osname.add(osname.toLowerCase());
            this.osarch.add(osarch.toLowerCase());
        }

        OS(String[] osname, String[] osarch) {
            for (String s : osname) {
                this.osname.add(s.toLowerCase());
            }
            for (String s : osarch) {
                this.osarch.add(s.toLowerCase());
            }
        }

        private boolean isCompatible(String osname, String osarch) {
            if (isOsNameCompatible(osname)) {
                if (isOsArchCompatible(osarch)) {
                    return true;
                }
            }
            return false;
        }

        private boolean isOsNameCompatible(String osname) {
            for (String s : this.osname) {
                if (osname.toLowerCase().indexOf(s) > -1) {
                    return true;
                }
            }
            return false;
        }

        private boolean isOsArchCompatible(String osarch) {
            for (String s : this.osarch) {
                if (osarch.toLowerCase().indexOf(s) > -1) {
                    return true;
                }
            }
            return false;
        }

        public static OS parseOs(String osname, String osarch) {
            for (OS os : OS.values()) {
                if (os.isCompatible(osname, osarch)) {
                    return os;
                }
            }
            return OS.unknown;
        }

        @Override
        public String toString() {
            return osname + "/" + osarch;
        }
    };

    public static OS getOsName() {
        String osname = System.getProperty("os.name");
        String osarch = System.getProperty("os.arch");
        OS os = OS.parseOs(osname, osarch);
        // System.out.println("OS="+os);
        return os;
    }

    public static boolean isMacOs() {
        OS os = getOsName();
        if ((os == OS.macosx) || (os == OS.macosx64)) {
            return true;
        } else {
            return false;
        }
    }

    static Object syncThreadResult = null;

    /**
     * 
     * @return The root of the application data directory. This is for instance .Simidude on Unix or somewhere in Library
     *         on the Mac.
     */
    public static synchronized String getApplicationDataDir() {
        String commonPath = System.getProperty("user.home") + File.separator;
        String extensionPath = ApplicationInfo.getApplicationName() + File.separator;
        String platformPath = ".";
        if (PlatformUtils.isMacOs()) {
            platformPath = "Library" + File.separator + "Application Support" + File.separator;
        }

        String dataDir = commonPath + platformPath + extensionPath;
        File fDataDir = new File(dataDir);
        if (!fDataDir.exists()) {
            if (!fDataDir.mkdirs()) {
                throw new IllegalStateException("Can not create application data directory " + dataDir);
            }
        }
        return dataDir;
    }

    public static String getApplicationCacheDir() {
        String extensionPath = IPreferenceConstants.CACHE_DIR_NAME + File.separator;
        return PlatformUtils.getApplicationDataDir() + extensionPath;
    }

    public static String getApplicationBasedir() {
        return System.getProperty("user.dir");
    }

    public static void setStatusLineContribution(final String msg) {
        safeAsyncRunnable(new Runnable() {
            public void run() {
                IStatusLineManager statusLine = getStatusLine();
                if (statusLine != null) {
                    statusLine.setMessage(msg);
                }
            }
        });
    }

    public static void setStatusLineErrorMsg(final String msg) {
        safeAsyncRunnable(new Runnable() {
            public void run() {
                IStatusLineManager statusLine = getStatusLine();
                if (statusLine != null) {
                    statusLine.setErrorMessage(msg);
                }
            }
        });
    }

    protected static IStatusLineManager getStatusLine() {
        IStatusLineManager statusLine = getStatusLineManager();
        if (statusLine != null) {
            while (statusLine instanceof SubStatusLineManager) {
                IContributionManager cb = ((SubStatusLineManager) statusLine).getParent();
                if (!(cb instanceof IStatusLineManager)) {
                    break;
                }
                statusLine = (IStatusLineManager) cb;
            }
        }
        return statusLine;
    }

    protected static IStatusLineManager getStatusLineManager() {
        return ApplicationBase.getContext().getApplicationGUI().getStatusLineManager();
    }

    public static void setConnectionBroken() {
        setStatusLineErrorMsg("Connection broken.");
    }

    public static void setConnected(String client) {
        setStatusLineErrorMsg(null);
        setStatusLineContribution("Connected to " + client);
    }

    public static void setConnected(int clientCount) {
        setStatusLineErrorMsg(null);
        setStatusLineContribution("Connected to " + clientCount + " clients");
    }

    public static void setNotConnected() {
        setStatusLineErrorMsg(null);
        setStatusLineContribution("Not connected.");
    }

    // public static void showConnectionBrokenDialog(final
    // ConnectionBrokenException e)
    // {
    // safeAsyncRunnable(new Runnable() {
    // public void run()
    // {
    //        new ExceptionDetailsDialog(Display.getDefault().getActiveShell(), "Verbindung zeitweilig unterbrochen", null,  //$NON-NLS-1$
    //            e.getMessage(), e).open(); //$NON-NLS-1$            
    // }
    // });
    // }

    public static void showErrorMessageWithException(final String title, final String msg, final Throwable t) {
        safeAsyncRunnable(new Runnable() {
            public void run() {
                new ExceptionDetailsDialog(Display.getDefault().getActiveShell(), title, null, msg,
                        new Status(IStatus.ERROR, ApplicationInfo.getApplicationName(), IStatus.OK, msg, t)).open();
            }
        });
    }

    public static void showWarningMessageWithException(final String title, final String msg, final Throwable t) {
        safeAsyncRunnable(new Runnable() {
            public void run() {
                new ExceptionDetailsDialog(Display.getDefault().getActiveShell(), title, null, msg,
                        new Status(IStatus.WARNING, ApplicationInfo.getApplicationName(), IStatus.OK, msg, t))
                                .open();
            }
        });
    }

    public static void showInfoMessage(final String title, final String msg) {
        safeAsyncRunnable(new Runnable() {
            public void run() {
                new ExceptionDetailsDialog(Display.getDefault().getActiveShell(), title, null, msg,
                        new Status(IStatus.INFO, ApplicationInfo.getApplicationName(), IStatus.OK, msg, null))
                                .open();
            }
        });
    }

    public static void showWarningMessage(final String title, final String msg) {
        safeAsyncRunnable(new Runnable() {
            public void run() {
                new ExceptionDetailsDialog(Display.getDefault().getActiveShell(), title, null, msg,
                        new Status(IStatus.WARNING, ApplicationInfo.getApplicationName(), IStatus.OK, msg, null))
                                .open();
            }
        });
    }

    public static void showWarningMessage(final String title, final String msg, final String strDetails) {
        safeAsyncRunnable(new Runnable() {
            public void run() {
                new ExceptionDetailsDialog(Display.getDefault().getActiveShell(), title, null, msg,
                        new Status(IStatus.WARNING, ApplicationInfo.getApplicationName(), IStatus.OK, msg, null),
                        strDetails).open();
            }
        });
    }

    public static void showErrorMessage(final String title, final String msg) {
        safeAsyncRunnable(new Runnable() {
            public void run() {
                MessageDialog.openError(Display.getDefault().getActiveShell(), title, msg);
                // new ExceptionDetailsDialog(Display.getDefault().getActiveShell(),
                // title, null, msg,
                // new Status(IStatus.ERROR, ApplicationInfo.getApplicationName(),
                // IStatus.OK, msg, null)).open();
            }
        });
    }

    public static void showToggleErrorMessage(final String title, final String msg, final String configKey) {
        if (!ApplicationBase.getContext().getConfiguration().getBoolean(configKey)) {
            safeAsyncRunnable(new Runnable() {
                public void run() {
                    MessageDialogWithToggle d = MessageDialogWithToggle.openError(
                            Display.getDefault().getActiveShell(), title, msg, "Don't show this message again",
                            false, null, null);
                    ApplicationBase.getContext().getConfiguration().setBoolean(configKey, d.getToggleState());
                }
            });
        }
    }

    public static boolean showOverwriteFilesDialog(final File dest) {
        safeSyncRunnable(new Runnable() {
            public void run() {
                String whatUpper = dest.isDirectory() ? "Directory" : "File";
                String what = dest.isDirectory() ? "directory" : "file";
                MessageBox box = new MessageBox(Display.getDefault().getActiveShell(),
                        SWT.ICON_WARNING | SWT.OK | SWT.CANCEL);
                box.setText("Overwrite Existing " + whatUpper + "?");
                box.setMessage("The " + what + " " + dest.getAbsolutePath()
                        + " already exists. Click \"OK\" to overwrite all existing contents.");
                int rc = box.open();
                if (rc == SWT.OK) {
                    syncThreadResult = Boolean.TRUE;
                } else {
                    syncThreadResult = Boolean.FALSE;
                }
            }
        });
        Boolean result = (Boolean) syncThreadResult;
        return result.booleanValue();
    }

    public static void safeAsyncRunnable(final Runnable runnable) {
        Display display = Display.getCurrent();
        if (display == null) {
            display = Display.getDefault();
        }
        if (display != null) {
            if (!display.isDisposed()) {
                try {
                    display.asyncExec(runnable);
                } catch (final Exception e) {
                    System.out.println("Error while executing: " + e.getMessage());
                    e.printStackTrace();
                }
            }
        }
    }

    public static void safeSyncRunnable(final Runnable runnable) {
        Display display = Display.getCurrent();
        if (display == null) {
            display = Display.getDefault();
        }
        if (display != null) {
            if (!display.isDisposed()) {
                try {
                    display.syncExec(runnable);
                } catch (final Exception e) {
                    System.out.println("Error while executing: " + e.getMessage());
                    e.printStackTrace();
                }
            }
        }
    }

}