All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.gpel.model.GpelContainerActivityOfOne Maven / Gradle / Ivy

Go to download

Grid BPEL Engine Client developed by Extreme Computing Lab, Indiana University

The newest version!
/* -*- mode: Java; c-basic-offset: 4; indent-tabs-mode: nil; -*-  //------100-columns-wide------>|*/
/*
 * Copyright (c) 2004-2005 Extreme! Lab, Indiana University. All rights reserved.
 *
 * This software is open source. See the bottom of this file for the license.
 *
 * $Id: GpelContainerActivityOfOne.java,v 1.4 2007/01/19 04:55:26 sshirasu Exp $
 */
package org.gpel.model;

import java.util.Iterator;

import org.xmlpull.infoset.XmlElement;
import org.xmlpull.infoset.XmlNamespace;

public abstract class GpelContainerActivityOfOne extends GpelContainerActivity {

    public GpelContainerActivityOfOne(String typeName, XmlElement target) {
        super(typeName, target);
    }

    public GpelContainerActivityOfOne(XmlNamespace ns, String typeName) {
        super(ns, typeName);
    }

    public void addActivity(GpelActivity activity) {
        if (getActivity(false) != null) {
            throw new IllegalStateException(
                    "this container can have only one activity that is already set " + xmlString());
        }
        xml().addElement(activity.xml());
    }

    // public abstract GpelActivity oneActivity();
    public GpelActivity oneActivity() {
        return getActivity();
    }

    /**
     * Activity is required (null is never returned)
     *
     * @return
     */
    public GpelActivity getActivity() {
        return getActivity(true);
    }

    protected GpelActivity getActivity(boolean requireActivity) {
        GpelActivity activity = null;
        for (XmlElement el : xml().requiredElementContent()) {
            GpelActivity possibleActivity = convertElementToActivityIfPossible(el);
            if (possibleActivity != null) {
                if (isRestrictedActivity(possibleActivity)) {
                    continue; // skip elements that are technically activities
                    // but are not the activity
                }
                if (activity != null) {
                    throw new GpelModelValidationException(
                            "only one activity is allowed in " + xmlString());
                }
                activity = possibleActivity;
            }
        }
        if (activity == null && requireActivity) {
            throw new GpelModelValidationException("activity is required in " + xmlString());
        }
        return activity;
    }

    protected boolean isRestrictedActivity(GpelActivity possibleActivity) {
        return possibleActivity instanceof GpelCondition || possibleActivity instanceof GpelElse
                || possibleActivity instanceof GpelElseIf;
    }

    public void setActivity(GpelActivity newActivity) {
        if (isRestrictedActivity(newActivity)) {
            throw new GpelModelValidationException("activity " + newActivity.xmlString()
                    + " is not allowed");
        }
        GpelActivity oldActivity = getActivity(false);
        if (oldActivity != null) {
            xml().removeElement(oldActivity.xml());
        }
        addActivity(newActivity);
    }

    public Iterable activities() {
        Iterable giterable = new Iterable() {
            public Iterator iterator() {
                return new Iterator() {
                    GpelActivity currentActivity = oneActivity();

                    public boolean hasNext() {
                        return currentActivity != null;
                    }

                    public GpelActivity next() {
                        if (currentActivity == null) {
                            throw new IllegalStateException();
                        }
                        GpelActivity a = currentActivity;
                        currentActivity = null;
                        return a;
                    }

                    public void remove() {
                        throw new IllegalStateException("not allowed to remove");
                    }

                };
            }
        };
        return giterable;
    }

}

/*
 * Indiana University Extreme! Lab Software License, Version 1.2
 *
 * Copyright (c) 2004-2005 The Trustees of Indiana University. All rights
 * reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * 1) All redistributions of source code must retain the above copyright notice,
 * the list of authors in the original source code, this list of conditions and
 * the disclaimer listed in this license;
 *
 * 2) All redistributions in binary form must reproduce the above copyright
 * notice, this list of conditions and the disclaimer listed in this license in
 * the documentation and/or other materials provided with the distribution;
 *
 * 3) Any documentation included with all redistributions must include the
 * following acknowledgement:
 *
 * "This product includes software developed by the Indiana University Extreme!
 * Lab. For further information please visit http://www.extreme.indiana.edu/"
 *
 * Alternatively, this acknowledgment may appear in the software itself, and
 * wherever such third-party acknowledgments normally appear.
 *
 * 4) The name "Indiana University" or "Indiana University Extreme! Lab" shall
 * not be used to endorse or promote products derived from this software without
 * prior written permission from Indiana University. For written permission,
 * please contact http://www.extreme.indiana.edu/.
 *
 * 5) Products derived from this software may not use "Indiana University" name
 * nor may "Indiana University" appear in their name, without prior written
 * permission of the Indiana University.
 *
 * Indiana University provides no reassurances that the source code provided
 * does not infringe the patent or any other intellectual property rights of any
 * other entity. Indiana University disclaims any liability to any recipient for
 * claims brought by any other entity based on infringement of intellectual
 * property rights or otherwise.
 *
 * LICENSEE UNDERSTANDS THAT SOFTWARE IS PROVIDED "AS IS" FOR WHICH NO
 * WARRANTIES AS TO CAPABILITIES OR ACCURACY ARE MADE. INDIANA UNIVERSITY GIVES
 * NO WARRANTIES AND MAKES NO REPRESENTATION THAT SOFTWARE IS FREE OF
 * INFRINGEMENT OF THIRD PARTY PATENT, COPYRIGHT, OR OTHER PROPRIETARY RIGHTS.
 * INDIANA UNIVERSITY MAKES NO WARRANTIES THAT SOFTWARE IS FREE FROM "BUGS",
 * "VIRUSES", "TROJAN HORSES", "TRAP DOORS", "WORMS", OR OTHER HARMFUL CODE.
 * LICENSEE ASSUMES THE ENTIRE RISK AS TO THE PERFORMANCE OF SOFTWARE AND/OR
 * ASSOCIATED MATERIALS, AND TO THE PERFORMANCE AND VALIDITY OF INFORMATION
 * GENERATED USING SOFTWARE.
 */





© 2015 - 2024 Weber Informatics LLC | Privacy Policy