codeOrchestra.lcs.license.CalendarUsageDayExpirationStrategy.java Source code

Java tutorial

Introduction

Here is the source code for codeOrchestra.lcs.license.CalendarUsageDayExpirationStrategy.java

Source

package codeOrchestra.lcs.license;

import java.util.prefs.BackingStoreException;
import java.util.prefs.Preferences;

import javax.swing.JOptionPane;

import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.PlatformUI;

import codeOrchestra.lcs.license.plimus.PlimusResponse;
import codeOrchestra.utils.DateUtils;

/**
 * @author Alexander Eliseyev
 */
public class CalendarUsageDayExpirationStrategy extends AbstractExpirationWithLocalSerialValidationStrategy
        implements ExpirationStrategy {

    private static final int EXPIRATION_DAYS = 15;
    private static final int EXPIRED_SESSION_MINUTES = 15;

    private static final String DATE_STRING = VersionHelper.getVersionCodeName();

    private static final Preferences preferences = Preferences
            .userNodeForPackage(CalendarUsageDayExpirationStrategy.class);

    private long startUpTime;
    private Thread expirationThread;

    @Override
    public boolean exitIfExpired() {
        return true;
    }

    @Override
    public void handleExpiration() {
        this.startUpTime = System.currentTimeMillis();
        this.expirationThread = new Thread() {
            public void run() {
                while (true) {
                    try {
                        Thread.sleep(DateUtils.MILLIS_PER_MINUTE);
                    } catch (InterruptedException e) {
                        terminate();
                        return;
                    }

                    if (System.currentTimeMillis() - startUpTime > DateUtils.MILLIS_PER_MINUTE
                            * EXPIRED_SESSION_MINUTES) {
                        terminate();
                        return;
                    }
                }
            }

            void terminate() {
                // RE-2715
                // Serial number must've been entered after the app start
                if (CodeOrchestraLicenseManager.isLicenseValid()) {
                    return;
                }

                JOptionPane.showMessageDialog(null,
                        "Expired license editor " + EXPIRED_SESSION_MINUTES
                                + " minute(s) session is over, the program will now quit",
                        "Expired license", JOptionPane.INFORMATION_MESSAGE);

                PlatformUI.getWorkbench().close();
            }
        };
        this.expirationThread.start();
    }

    @Override
    public boolean showLicenseExpiredDialog() {
        String expireMessage = String.format(
                "%d day(s) evaluation license has expired. The programm will quit unless you enter a serial number",
                getExpirationPeriod());

        MessageDialog dialog = new MessageDialog(Display.getDefault().getActiveShell(), "Evaluation License", null,
                expireMessage, MessageDialog.QUESTION, new String[] { "Exit", "Enter Serial Number" }, 0);

        int result = dialog.open();
        if (result == 1) {
            return showSerialNumberDialog();
        }

        return false;
    }

    @Override
    public int getTrialDaysInUse() {
        long curentTime = System.currentTimeMillis();
        String currentTimeStr = String.valueOf(curentTime);

        long firstUsageDate = Long.valueOf(preferences.get(DATE_STRING, currentTimeStr));
        if (curentTime == firstUsageDate) {
            try {
                preferences.put(DATE_STRING, currentTimeStr);
                preferences.sync();
            } catch (BackingStoreException e) {
                throw new RuntimeException("Can't sync license expiry data", e);
            }
        }

        return (int) ((curentTime - firstUsageDate) / DateUtils.MILLIS_PER_DAY) + 1;
    }

    @Override
    public int getExpirationPeriod() {
        return EXPIRATION_DAYS;
    }

    @Override
    public boolean allowTrial() {
        return true;
    }

    @Override
    public boolean isTrialOnly() {
        return false;
    }

    @Override
    public boolean isSubscriptionBased() {
        return false;
    }

    @Override
    protected void registerProduct(String serialNumber, PlimusResponse keyRegistrationResponse) {
        CodeOrchestraLicenseManager.registerProduct(serialNumber);
    }

    @Override
    public boolean allowsDemo() {
        return false;
    }

    @Override
    public boolean isInDemoMode() {
        throw new UnsupportedOperationException();
    }

}