/**
   * Create an 'empty' BootDashViewModel with no run targets. Targets can be added by adding them to
   * the runTarget's LiveSet.
   */
  public BootDashViewModel(BootDashModelContext context, RunTargetType... runTargetTypes) {
    runTargets = new LiveSet<RunTarget>(new LinkedHashSet<RunTarget>());
    models = new BootDashModelManager(context, runTargets);

    manager = new RunTargetPropertiesManager(context, runTargetTypes);
    List<RunTarget> existingtargets = manager.getStoredTargets();
    runTargets.addAll(existingtargets);
    runTargets.addListener(manager);

    this.runTargetTypes = new LinkedHashSet<RunTargetType>(Arrays.asList(runTargetTypes));
    filterBox = new TagFilterBoxModel();
    toggleFiltersModel = new ToggleFiltersModel();
    filter = Filters.compose(filterBox.getFilter(), toggleFiltersModel.getFilter());
    devtoolsProcessTracker = DevtoolsUtil.createProcessTracker(this);
  }
  public void removeTarget(RunTarget toRemove, UserInteractions userInteraction) {

    if (toRemove != null) {
      RunTarget found = null;
      for (RunTarget existingTarget : runTargets.getValues()) {
        if (existingTarget.getId().equals(toRemove.getId())) {
          found = existingTarget;
          break;
        }
      }
      if (found != null
          && userInteraction.confirmOperation(
              "Deleting run target: " + found.getName(),
              "Are you sure that you want to delete "
                  + found.getName()
                  + "? All information regarding this target will be permanently removed.")) {
        runTargets.remove(found);
      }
    }
  }
 public List<DesiredLRPResponse> refreshDesiredLRPs() {
   List<DesiredLRPResponse> lrps = getReceptor().getDesiredLRPs();
   Set<String> activeProcessGuids = new HashSet<String>(lrps.size());
   for (DesiredLRPResponse dlrp : lrps) {
     activeProcessGuids.add(dlrp.getProcessGuid());
   }
   ArrayList<BootDashElement> newElements = new ArrayList<BootDashElement>();
   for (DesiredLRPResponse lrp : lrps) {
     String id = lrp.getProcessGuid();
     LatticeBootDashElement el = ensureElement(id);
     newElements.add(el);
     el.setDesiredLrp(lrp);
     elementByProcessGuid.put(id, el);
   }
   elements.replaceAll(newElements);
   return lrps;
 }
 private synchronized LatticeBootDashElement ensureElement(String processGuid) {
   LatticeBootDashElement existing;
   LatticeBootDashElement created = null;
   synchronized (this) {
     existing = elementByProcessGuid.get(processGuid);
     if (existing == null) {
       created =
           existing =
               new LatticeBootDashElement(
                   this,
                   ltcTarget,
                   processGuid,
                   PropertyStoreFactory.createSubStore(processGuid, store));
       elementByProcessGuid.put(processGuid, created);
     }
   }
   if (created != null) {
     elements.add(created);
   }
   return existing;
 }