org.xmind.cathy.internal.BetaVerifier.java Source code

Java tutorial

Introduction

Here is the source code for org.xmind.cathy.internal.BetaVerifier.java

Source

/* ******************************************************************************
 * Copyright (c) 2006-2012 XMind Ltd. and others.
 * 
 * This file is a part of XMind 3. XMind releases 3 and
 * above are dual-licensed under the Eclipse Public License (EPL),
 * which is available at http://www.eclipse.org/legal/epl-v10.html
 * and the GNU Lesser General Public License (LGPL), 
 * which is available at http://www.gnu.org/licenses/lgpl.html
 * See http://www.xmind.net/license.html for details.
 * 
 * Contributors:
 *     XMind Ltd. - initial API and implementation
 *******************************************************************************/
package org.xmind.cathy.internal;

import java.io.IOException;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.program.Program;
import org.eclipse.swt.widgets.Display;

public class BetaVerifier {

    /**
     * The timestamp when the beta will expire. Beta releases will change this
     * value to a valid timestamp.
     */
    // Note: Not defined as 'final' to prevent compiling warning
    // at expression 'BETA_EXPIRE_TIME > 0'.
    private static long BETA_EXPIRY_TIME = 0L;

    private static long LAUNCH_TIME = System.currentTimeMillis();

    private final Display display;

    private final String brandingVersion;

    private final String buildId;

    public BetaVerifier(Display display) {
        this.display = display;
        this.brandingVersion = System.getProperty(CathyApplication.SYS_BRANDING_VERSION, ""); //$NON-NLS-1$
        this.buildId = System.getProperty(CathyApplication.SYS_BUILDID, "X.x.x"); //$NON-NLS-1$
    }

    public boolean shouldExitAfterBetaExpired() {
        if (isBeta() && isBetaExpired()) {
            promptBetaExpiry();
            return true;
        } else if (isBeta()) {
            String licenseRestrictions = System.getProperty("org.xmind.product.license.restrictions"); //$NON-NLS-1$
            if (licenseRestrictions == null || "".equals(licenseRestrictions)) { //$NON-NLS-1$
                licenseRestrictions = NLS.bind(WorkbenchMessages.About_BetaExpiryMessage_withExpiryTime,
                        new SimpleDateFormat("MMM d, yyyy") //$NON-NLS-1$
                                .format(new Date(BETA_EXPIRY_TIME)));
                System.setProperty("org.xmind.product.license.restrictions", //$NON-NLS-1$
                        licenseRestrictions);
            }
        }
        return false;
    }

    private int openMessageDialog(String message, int dialogType, String[] buttonLabels) {
        URL titleIconURL = Platform.getBundle(CathyPlugin.PLUGIN_ID).getResource("icons/xmind.16.png"); //$NON-NLS-1$
        Image titleIcon = null;
        try {
            titleIcon = new Image(display, titleIconURL.openStream());
        } catch (IOException e) {
        }

        try {
            MessageDialog dialog = new MessageDialog(null,
                    WorkbenchMessages.BetaVerifier_BetaExpiredPromptDialog_windowTitle, titleIcon, message,
                    dialogType, buttonLabels, 0);
            return dialog.open();
        } finally {
            if (titleIcon != null)
                titleIcon.dispose();
        }

    }

    private void promptBetaExpiry() {
        int selection = openMessageDialog(NLS.bind(
                WorkbenchMessages.BetaVerifier_BetaExpiredPromptDialog_message_withBrandingVersion_andBuildId,
                brandingVersion, buildId), MessageDialog.INFORMATION,
                new String[] { WorkbenchMessages.BetaVerifier_BetaExpiredPromptDialog_CheckAndInstallButton_text,
                        WorkbenchMessages.BetaVerifier_BetaExpiredPromptDialog_ExitButton_text });
        if (selection == 0) {
            openDownloadSite();
        }
    }

    private void openDownloadSite() {
        Program.launch("http://www.xmind.net/xmind/beta-expired/" //$NON-NLS-1$
                + buildId.replace("qualifier", "000000000000")); //$NON-NLS-1$ //$NON-NLS-2$
    }

    public static boolean isBeta() {
        return BETA_EXPIRY_TIME > 0;
    }

    public static boolean isBetaExpired() {
        return LAUNCH_TIME > BETA_EXPIRY_TIME;
    }

}