- // high-level access
-
- /**
- * Adds the given subcomponent ID to the set of allowed subcomponent IDs and links the given {@link GUIComponent} as the delegate target
- * for this subcomponent ID. <br>
- * Note that this method does not affect whether {@link #setSubcomponentHighLevelState(String, String, Object)
- * set}/{@link #getSubcomponentHighLevelState(String, String)} will be called. <br>
- * See {@link GUIComponent#setHighLevelState(String, Object)} for details about subcomponent IDs.
- *
- * @author Daniel Kirschten
- */
- protected void addHighLevelStateSubcomponentID(String subcomponentID, GUIComponent subcomponent)
- {
- checkHighLevelStateIDPart(subcomponentID);
- subcomponentsByHighLevelStateSubcomponentID.put(subcomponentID, subcomponent);
- }
-
- /**
- * Removes the given subcomponent ID from the set of allowed subcomponent IDs. <br>
- * Note that this method does not affect whether {@link #setSubcomponentHighLevelState(String, String, Object)
- * set}/{@link #getSubcomponentHighLevelState(String, String)} will be called.<br>
- * See {@link GUIComponent#setHighLevelState(String, Object)} for details about subcomponent IDs.
- *
- * @author Daniel Kirschten
- */
- protected void removeHighLevelStateSubcomponentID(String subcomponentID)
- {
- subcomponentsByHighLevelStateSubcomponentID.remove(subcomponentID);
- }
-
- /**
- * Adds the given atomic state ID to the set of allowed atomic state IDs. <br>
- * See {@link GUIComponent#setHighLevelState(String, Object)} for details about atomic state IDs.
- *
- * @author Daniel Kirschten
- */
- protected void addAtomicHighLevelStateID(String stateID)
- {
- checkHighLevelStateIDPart(stateID);
- highLevelAtomicStates.add(stateID);
- }
-
- /**
- * Removes the given atomic state ID from the set of allowed atomic state IDs. <br>
- * See {@link GUIComponent#setHighLevelState(String, Object)} for details about atomic state IDs.
- *
- * @author Daniel Kirschten
- */
- protected void removeAtomicHighLevelStateID(String stateID)
- {
- highLevelAtomicStates.remove(stateID);
- }
-
- @Override
- public final void setHighLevelState(String stateID, Object newState)
- {
- int indexOfDot = stateID.indexOf('.');
- if (indexOfDot == -1)
- if (highLevelAtomicStates.contains(stateID))
- setAtomicHighLevelState(stateID, newState);
- else
- super.setHighLevelState(stateID, newState);
- else
- setSubcomponentHighLevelState(stateID.substring(0, indexOfDot), stateID.substring(indexOfDot + 1), newState);
- }
-
- /**
- * This method is called in {@link #setHighLevelState(String, Object)} when the state ID is not atomic. The default implementation uses
- * the information given to {@link #addHighLevelStateSubcomponentID(String, GUIComponent)
- * add}/{@link #removeHighLevelStateSubcomponentID(String)} to decide which subcomponent to delegate to.<br>
- * Note that {@link #addHighLevelStateSubcomponentID(String, GUIComponent) add}/{@link #removeHighLevelStateSubcomponentID(String)}
- * don't affect whether this method will be called.
- *
- * @author Daniel Kirschten
- */
- protected void setSubcomponentHighLevelState(String subcomponentID, String subcomponentHighLevelStateID, Object newState)
- {
- GUIComponent subcomponent = subcomponentsByHighLevelStateSubcomponentID.get(subcomponentID);
- if (subcomponent != null)
- subcomponent.setHighLevelState(subcomponentHighLevelStateID, newState);
- else
- super.setHighLevelState(subcomponentID + "." + subcomponentHighLevelStateID, newState);
- }
-
- /**
- * This method is called in {@link #setHighLevelState(String, Object)} when the state ID is atomic and in the set of allowed atomic
- * state IDs. <br>
- * See {@link GUIComponent#setHighLevelState(String, Object)} for details about atomic state IDs.
- *
- * @author Daniel Kirschten
- */
- @SuppressWarnings({ "static-method", "unused" }) // this method is intended to be overridden
- protected void setAtomicHighLevelState(String stateID, Object newState)
- {
- throw new IllegalStateException("Unknown high level state ID: " + stateID);
- }
-
- @Override
- public final Object getHighLevelState(String stateID)
- {
- int indexOfDot = stateID.indexOf('.');
- if (indexOfDot == -1)
- {
- if (highLevelAtomicStates.contains(stateID))
- return getAtomicHighLevelState(stateID);
- return super.getHighLevelState(stateID);
- }
- return getSubcomponentHighLevelState(stateID.substring(0, indexOfDot), stateID.substring(indexOfDot + 1));
- }
-
- /**
- * This method is called in {@link #getHighLevelState(String, Object)} when the state ID is not atomic. The default implementation uses
- * the information given to {@link #addHighLevelStateSubcomponentID(String, GUIComponent)
- * add}/{@link #removeHighLevelStateSubcomponentID(String)} to decide which subcomponent to delegate to. <br>
- * Note that {@link #addHighLevelStateSubcomponentID(String, GUIComponent) add}/{@link #removeHighLevelStateSubcomponentID(String)}
- * don't affect whether this method will be called.
- *
- * @author Daniel Kirschten
- */
- protected Object getSubcomponentHighLevelState(String subcomponentID, String subcomponentHighLevelStateID)
- {
- GUIComponent subcomponent = subcomponentsByHighLevelStateSubcomponentID.get(subcomponentID);
- if (subcomponent != null)
- return subcomponent.getHighLevelState(subcomponentHighLevelStateID);
- return super.getHighLevelState(subcomponentID + "." + subcomponentHighLevelStateID);
- }
-
- /**
- * This method is called in {@link SubmodelComponent#getHighLevelState(String)} when the state ID is in the set of allowed atomic state
- * IDs. <br>
- * See {@link GUIComponent#setHighLevelState(String, Object)} for details about atomic state IDs.
- *
- * @author Daniel Kirschten
- */
- @SuppressWarnings("static-method") // this method is intended to be overridden
- protected Object getAtomicHighLevelState(String stateID)
- {
- throw new IllegalStateException("Unknown high level state ID: " + stateID);
- }
-
- private static void checkHighLevelStateIDPart(String stateIDPart)
- {
- if (stateIDPart.indexOf('.') != -1)
- throw new IllegalArgumentException("Illegal high level state ID part (contains dot): " + stateIDPart);
-
- }
-