Exemple #1
0
 private void rateSStateChanged(
     javax.swing.event.ChangeEvent evt) { // GEN-FIRST:event_rateSStateChanged
   if (Engine.getInstance().getProxyServer() instanceof CrwProxyServer) {
     CrwProxyServer server = (CrwProxyServer) Engine.getInstance().getProxyServer();
     if (!rateS.getModel().getValueIsAdjusting()) {
       server.setCameraRates((double) rateS.getValue());
     }
   }
 } // GEN-LAST:event_rateSStateChanged
  @Override
  public void invoke(final OutputEvent oe, ArrayList<Token> tokens) {
    LOGGER.log(Level.FINE, "CoreEventHandler invoked with " + oe);
    if (oe instanceof AbortMission) {
      for (Token token : tokens) {
        if (token.getProxy() != null) {
          token.getProxy().abortMission(oe.getMissionId());
        }
      }
    } else if (oe instanceof CompleteMission) {
      for (Token token : tokens) {
        if (token.getProxy() != null) {
          token.getProxy().completeMission(oe.getMissionId());
        }
      }
    } else if (oe instanceof SendProxyAbortAllMissions) {
      for (Token token : tokens) {
        if (token.getProxy() != null) {
          // Add proxy that will be aborting the missions
          ArrayList<ProxyInt> relevantProxies = new ArrayList<ProxyInt>();
          relevantProxies.add(token.getProxy());
          // Get list of all mission ids proxy is involved in
          ArrayList<UUID> missionIds = new ArrayList<UUID>();
          ArrayList<OutputEvent> outputEvents = token.getProxy().getEvents();
          for (OutputEvent proxyOe : outputEvents) {
            if (!missionIds.contains(proxyOe.getMissionId())) {
              missionIds.add(proxyOe.getMissionId());
            }
          }
          // Send proxy abort mission for each mission
          for (UUID missionId : missionIds) {
            ProxyAbortMissionReceived pamr =
                new ProxyAbortMissionReceived(missionId, relevantProxies);
            ArrayList<GeneratedEventListenerInt> listenersCopy =
                (ArrayList<GeneratedEventListenerInt>) listeners.clone();
            for (GeneratedEventListenerInt listener : listenersCopy) {
              listener.eventGenerated(pamr);
            }
          }
        }
      }
    } else if (oe instanceof SendProxyAbortFutureMissions) {
      for (Token token : tokens) {
        if (token.getProxy() != null) {
          // Add proxy that will be aborting the missions
          ArrayList<ProxyInt> relevantProxies = new ArrayList<ProxyInt>();
          relevantProxies.add(token.getProxy());
          // Get list of all mission ids proxy is involved in
          ArrayList<UUID> missionIds = new ArrayList<UUID>();
          ArrayList<OutputEvent> outputEvents = token.getProxy().getEvents();
          for (OutputEvent proxyOe : outputEvents) {
            if (!missionIds.contains(proxyOe.getMissionId())) {
              missionIds.add(proxyOe.getMissionId());
            }
          }
          // Remove current mission from list of missions to be aborted by proxy
          OutputEvent curOe = token.getProxy().getCurrentEvent();
          if (curOe != null) {
            missionIds.remove(curOe);
          }
          // Send proxy abort mission for each mission
          for (UUID missionId : missionIds) {
            ProxyAbortMissionReceived pamr =
                new ProxyAbortMissionReceived(missionId, relevantProxies);
            ArrayList<GeneratedEventListenerInt> listenersCopy =
                (ArrayList<GeneratedEventListenerInt>) listeners.clone();
            for (GeneratedEventListenerInt listener : listenersCopy) {
              listener.eventGenerated(pamr);
            }
          }
        }
      }
    } else if (oe instanceof SendAbortMission) {
      // We will move all tokens out of all places in the plan and be in an end Recovery place
      //  Do nothing (abort mission is handled by PlanManager)
      AbortMissionReceived amr = new AbortMissionReceived(oe.getMissionId());
      ArrayList<GeneratedEventListenerInt> listenersCopy =
          (ArrayList<GeneratedEventListenerInt>) listeners.clone();
      for (GeneratedEventListenerInt listener : listenersCopy) {
        listener.eventGenerated(amr);
      }
    } else if (oe instanceof StartTimer) {
      Timer timer =
          new Timer(
              ((StartTimer) oe).timerDuration * 1000,
              new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent ae) {
                  TimerExpired te = new TimerExpired(oe.getId(), oe.getMissionId());
                  ArrayList<GeneratedEventListenerInt> listenersCopy =
                      (ArrayList<GeneratedEventListenerInt>) listeners.clone();
                  for (GeneratedEventListenerInt listener : listenersCopy) {
                    listener.eventGenerated(te);
                  }
                }
              });
      timer.setRepeats(false);
      timer.start();
    } else if (oe instanceof ReturnValue) {
      ReturnValue returnValue = (ReturnValue) oe;
      PlanManager pm = Engine.getInstance().getPlanManager(returnValue.getMissionId());
      String returnVariableName = pm.getPlanName() + MissionPlanSpecification.RETURN_SUFFIX;
      // Set local scope
      Engine.getInstance().setVariableValue(returnVariableName, returnValue.getReturnValue(), pm);
      // Set in parent's scope
      PlanManager parentPm = Engine.getInstance().getParentPm(pm);
      if (parentPm != null) {
        Engine.getInstance()
            .setVariableValue(returnVariableName, returnValue.getReturnValue(), parentPm);
      } else {
        LOGGER.warning("ReturnValue on event in mission with no parent mission.");
      }
    } else if (oe instanceof RefreshTasks) {
      for (Token token : tokens) {
        if (token.getType() == Token.TokenType.Task) {
          if (token.getTask() != null && token.getProxy() != null) {
            if (token.getProxy().getCurrentTask() == token.getTask()) {
              // Generate task started for every proxy
              ArrayList<ProxyInt> proxyList =
                  Engine.getInstance().getProxyServer().getProxyListClone();
              for (ProxyInt proxy : proxyList) {
                Task currentTask = proxy.getCurrentTask();
                if (currentTask != null) {
                  PlanManager pm = Engine.getInstance().getPlanManager(currentTask);
                  if (pm != null) {
                    pm.eventGenerated(new TaskStarted(pm.missionId, currentTask));
                  } else {
                    LOGGER.severe("No mapping from task to plan manager: " + currentTask);
                  }
                }
              }
            }
          } else if (token.getTask() == null) {
            LOGGER.warning("RefreshTasks activated with task token with a null task: " + token);
          } else {
            LOGGER.warning("RefreshTasks activated with task token with a null proxy: " + token);
          }
        }
      }
    } else if (oe instanceof TaskComplete) {
      for (Token token : tokens) {
        if (token.getType() == Token.TokenType.Task) {
          if (token.getTask() != null && token.getProxy() != null) {
            // Update proxy's task list
            token.getProxy().taskCompleted(token.getTask());
            token.setProxy(null);
            Engine.getInstance().unlinkTask(token.getTask());
          } else if (token.getTask() == null) {
            LOGGER.warning("TaskComplete activated with task token with a null task: " + token);
          } else {
            LOGGER.warning("TaskComplete activated with task token with a null proxy: " + token);
          }
        }
      }
    } else if (oe instanceof GetAllProxyTokens) {
      TokensReturned tr =
          new TokensReturned(oe.getId(), oe.getMissionId(), Engine.getInstance().getAllProxies());
      ArrayList<GeneratedEventListenerInt> listenersCopy =
          (ArrayList<GeneratedEventListenerInt>) listeners.clone();
      for (GeneratedEventListenerInt listener : listenersCopy) {
        listener.eventGenerated(tr);
      }
    }
  }