// THIS SOFTWARE IS PROVIDED BY SOFTARIS PTY.LTD. AND OTHER METABOSS
// CONTRIBUTORS ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING,
// BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SOFTARIS PTY.LTD.
// OR OTHER METABOSS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
// EVEN IF SOFTARIS PTY.LTD. OR OTHER METABOSS CONTRIBUTORS ARE ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
//
// Copyright 2000-2005 Softaris Pty.Ltd. All Rights Reserved.
package com.metaboss.sdlctools.models.impl.metabossmodel.enterprisemodel;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import org.netbeans.mdr.storagemodel.StorableObject;
import com.metaboss.sdlctools.models.impl.metabossmodel.ModelElementImpl;
import com.metaboss.sdlctools.models.metabossmodel.datadictionarymodel.DataType;
import com.metaboss.sdlctools.models.metabossmodel.datadictionarymodel.Structure;
import com.metaboss.sdlctools.models.metabossmodel.enterprisemodel.Event;
import com.metaboss.sdlctools.models.metabossmodel.enterprisemodel.EventDataField;
import com.metaboss.sdlctools.models.metabossmodel.enterprisemodel.EventMessageField;
import com.metaboss.sdlctools.models.metabossmodel.enterprisemodel.Message;
public abstract class EventImpl extends ModelElementImpl implements Event
{
// Required constructor
protected EventImpl(StorableObject storable)
{
super(storable);
}
/** @return All combined structures and types used in this structure */
public Collection getCombinedTypes()
{
Set lCombinedTypes = new HashSet();
populateCombinedTypes(lCombinedTypes);
return java.util.Collections.unmodifiableCollection(lCombinedTypes);
}
/** Populates passed set with all combined structures, messages and types used in this structure */
public void populateCombinedTypes(Set pAlredyKnownTypes)
{
// Work on input fields
Collection lDataFields = getDataFields();
if (!lDataFields.isEmpty())
{
for (Iterator lDataFieldsIterator = lDataFields.iterator(); lDataFieldsIterator.hasNext();)
{
EventDataField lDataField = (EventDataField)lDataFieldsIterator.next();
DataType lDataType = lDataField.getDataType();
if (lDataType != null)
{
if (!pAlredyKnownTypes.contains(lDataType))
pAlredyKnownTypes.add(lDataType);
}
else
{
Structure lStructureType = lDataField.getStructureType();
if (lStructureType != null)
{
if (!pAlredyKnownTypes.contains(lStructureType))
{
// Register this structure and populate all types this structure depends on
// note that this will recursively populate all dependent types
pAlredyKnownTypes.add(lStructureType);
pAlredyKnownTypes.addAll(lStructureType.getCombinedTypes());
}
}
}
}
}
// Work on output messages
Collection lMessageFields = getMessageFields();
if (!lMessageFields.isEmpty())
{
for (Iterator lMessageFieldsIterator = lMessageFields.iterator(); lMessageFieldsIterator.hasNext();)
{
EventMessageField lMessageField = (EventMessageField)lMessageFieldsIterator.next();
Message lMessageType = lMessageField.getMessageType();
if (!pAlredyKnownTypes.contains(lMessageType))
{
// Register this structure and populate all types this structure depends on
// note that this will recursively populate all dependent types
pAlredyKnownTypes.add(lMessageType);
pAlredyKnownTypes.addAll(lMessageType.getCombinedTypes());
}
}
}
}
}
|