Package com.nexirius.util

Source Code of com.nexirius.util.SemaphoreTest

//{HEADER
/**
* This class is part of jnex 'Nexirius Application Framework for Java'
* Copyright (C) Nexirius GmbH, CH-4450 Sissach, Switzerland (www.nexirius.ch)
*
* <p>This library is free software; you can redistribute it and/or<br>
* modify it under the terms of the GNU Lesser General Public<br>
* License as published by the Free Software Foundation; either<br>
* version 2.1 of the License, or (at your option) any later version.</p>
*
* <p>This library is distributed in the hope that it will be useful,<br>
* but WITHOUT ANY WARRANTY; without even the implied warranty of<br>
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU<br>
* Lesser General Public License for more details.</p>
*
* <p>You should have received a copy of the GNU Lesser General Public<br>
* License along with this library; if not, write to the Free Software<br>
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</p>
* </blockquote>
*
* <p>
* Nexirius GmbH, hereby disclaims all copyright interest in<br>
* the library jnex' 'Nexirius Application Framework for Java' written<br>
* by Marcel Baumann.</p>
*/
//}HEADER
package com.nexirius.util;

import com.nexirius.framework.command.DefaultProcessor;
import com.nexirius.framework.datamodel.BooleanModel;
import com.nexirius.framework.datamodel.DefaultDataModelCommand;
import com.nexirius.framework.datamodel.StructModel;
import com.nexirius.framework.dataviewer.ViewerFactory;
import com.nexirius.util.locale.LocaleManagerImpl;
import com.nexirius.util.resource.ClientResourceImpl;

import javax.swing.*;

/**
* This class is used to synchronise thread execution
*/
public final class SemaphoreTest extends JFrame {
    ViewerFactory factory;
    LocaleManagerImpl locale;
    Semaphore s = new Semaphore();
    BooleanModel needWait = new BooleanModel(false, "needWait");

    class Start extends DefaultDataModelCommand {
        public Start() {
            super("Start");
        }

        public void doAction() {
            print("reserve Semaphore");
            try {
                s.reserve();

                if (!needWait.getBoolean()) {
                    s.release();
                }

                print("waiting...");
                print("timeout = " + s.waitFor(3000));
                print("done.");
            } catch (Exception ex) {
                print("EXCEPTION: " + ex.getMessage());
            }
        }

        public void print(String s) {
            System.out.println("Start:" + s);
        }
    }

    class Ok extends DefaultDataModelCommand {
        public Ok() {
            super("Ok");
        }

        public void doAction() {
            print("release Semaphore");
            s.release();
        }

        public void print(String s) {
            System.out.println("Ok:" + s);
        }
    }


    class S1 extends StructModel {

        public S1() {
            append(needWait);
            appendMethod(new Start());
            appendMethod(new Ok());
        }
    }

    public SemaphoreTest()
            throws Exception {
        super();

        ClientResourceImpl resource = new ClientResourceImpl("SemaphoreTest");

        locale = new LocaleManagerImpl();
        locale.addLocaleListener(resource);

        factory = new ViewerFactory(resource);
        factory.setCommandProcessor(new DefaultProcessor());

        getContentPane().add(factory.createDefaultEditor(new S1()).getJComponent());

        pack();
        setVisible(true);
    }

    public static void main(String argv[]) {
        try {
            new SemaphoreTest();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}
TOP

Related Classes of com.nexirius.util.SemaphoreTest

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.