// Copyright 2012 Georg-August-Universität Göttingen, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package de.ugoe.cs.autoquest.eventcore; import java.util.Collections; import java.util.LinkedList; import java.util.List; /** *

* This class is a dummy hierarchical event target to represent groups of event targets. A group of * event targets can be integrated in any hierarchical event target model using the method * {@link HierarchicalEventTargetModel#groupEventTargets(List, String, IEventTargetFactory)}. A * group has the same behavior as any other parent hierarchical event target. *

* * @author Patrick Harms */ public class HierarchicalEventTargetGroup extends AbstractDefaultHierarchicalEventTarget { /** *

* default serial version UID *

*/ private static final long serialVersionUID = 1L; /** * the list of grouped event targets */ private List groupedEventTargets = new LinkedList(); /** *

* instantiates an event target group with a name and its optional parent event target *

* * @param groupName the name of the event target group * @param parent the optional parent event target of the group * @param eventTargetModel the event target model to which the group will belong */ public HierarchicalEventTargetGroup(String groupName, IHierarchicalEventTarget parent, HierarchicalEventTargetModel eventTargetModel) { super(new GroupSpecification(groupName), parent); super.setEventTargetModel(eventTargetModel); } /* (non-Javadoc) * @see de.ugoe.cs.autoquest.eventcore.IEventTarget#getPlatform() */ @Override public String getPlatform() { return "none"; } /* (non-Javadoc) * @see de.ugoe.cs.autoquest.eventcore.IEventTarget#getStringIdentifier() */ @Override public String getStringIdentifier() { return ((GroupSpecification) super.getSpecification()).name; } /* (non-Javadoc) * @see java.lang.Object#toString() */ @Override public String toString() { return getStringIdentifier(); } /* (non-Javadoc) * @see IHierarchicalEventTarget#updateSpecification(IEventTargetSpec) */ @Override public void updateSpecification(IEventTargetSpec furtherSpec) { // do nothing } /** *

* returns the list of event targets belonging to this group. *

* * @return the event targets belonging to this group * */ public List getGroupedEventTargets() { return Collections.unmodifiableList(groupedEventTargets); } /** *

* allows adding a new event target to the group *

* * @param eventTarget the new member of the group */ void addToGroup(IHierarchicalEventTarget eventTarget) { this.groupedEventTargets.add(eventTarget); } /** *

* internally required event target specification for an event target group. This is just a * wrapper for a name of an event target group *

* * @author Patrick Harms */ private static class GroupSpecification implements IEventTargetSpec { /** *

* default serial version UID *

*/ private static final long serialVersionUID = 1L; /** *

* the name of the event target group represented by this specification *

*/ private String name; /** *

* instantiates the group specification with the given name. Two group specifications * are only similar, if their names match. *

* * @param name the name of the group */ private GroupSpecification(String name) { super(); this.name = name; } /* (non-Javadoc) * @see IEventTargetSpec#getSimilarity(IEventTargetSpec) */ @Override public boolean getSimilarity(IEventTargetSpec other) { return (other instanceof GroupSpecification) && name.equals(((GroupSpecification) other).name); } } }