/*
 * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
 */
package com.sun.glass.ui;

import com.sun.glass.ui.delegate.ClipboardDelegate;
import com.sun.glass.ui.delegate.MenuBarDelegate;
import com.sun.glass.ui.delegate.MenuDelegate;
import com.sun.glass.ui.delegate.MenuItemDelegate;

public abstract class PlatformFactory {
    private static PlatformFactory instance;
    public static PlatformFactory getPlatformFactory() {
        if (instance == null) {
            try {
                String platform = Platform.DeterminePlatform();
                String factory = "com.sun.glass.ui." +  platform.toLowerCase() + "."+ platform + "PlatformFactory";
                //System.out.println("Loading Glass Factory " + factory);
                Class c;
                c = Class.forName(factory);
                if (c == null) {
                    System.out.println("Failed to load factory");
                    return null;
                }
                instance = (PlatformFactory) c.newInstance();
            } catch (Exception e) {
                System.out.println("Failed to load Glass factory class");
            }
        }
        return instance;
    }

    public abstract Application createApplication();
    public abstract MenuBarDelegate createMenuBarDelegate(MenuBar menubar);
    public abstract MenuDelegate createMenuDelegate(Menu menu);
    public abstract MenuItemDelegate createMenuItemDelegate(MenuItem menuItem);
    public abstract ClipboardDelegate createClipboardDelegate();
}
