com.google.common.collect.ListMultimap#keySet ( )源码实例Demo

下面列出了com.google.common.collect.ListMultimap#keySet ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: hmftools   文件: DiploidRatioSupplier.java
DiploidRatioSupplier(@NotNull final ListMultimap<Chromosome, ReadRatio> normalRatios) {
    final ReferenceRatioStatistics stats = ReferenceRatioStatisticsFactory.fromReferenceRatio(normalRatios);

    for (Chromosome chromosome : normalRatios.keySet()) {
        final List<ReadRatio> ratios = normalRatios.get(chromosome);
        final List<ReadRatio> adjustedRatios;
        if (chromosome.equals(HumanChromosome._Y)) {
            adjustedRatios = ratios;
        } else {
            double expectedRatio = chromosome.equals(HumanChromosome._X) && !stats.containsTwoXChromosomes() ? 0.5 : 1;
            adjustedRatios = new DiploidRatioNormalization(expectedRatio,
                    ROLLING_MEDIAN_MAX_DISTANCE,
                    ROLLING_MEDIAN_MIN_COVERAGE,
                    ratios).get();
        }
        result.replaceValues(chromosome, adjustedRatios);
    }
}
 
源代码2 项目: java-n-IDE-for-Android   文件: DataMerger.java
/**
 * Sets the post blob load state to WRITTEN.
 *
 * After a load from the blob file, all items have their state set to nothing.
 * If the load mode is set to incrementalState then we want the items that are in the current
 * merge result to have their state be WRITTEN.
 *
 * This will allow further updates with {@link #mergeData(MergeConsumer, boolean)} to ignore the
 * state at load time and only apply the new changes.
 *
 * @see #loadFromBlob(File, boolean)
 * @see DataItem#isWritten()
 */
private void setPostBlobLoadStateToWritten() {
    ListMultimap<String, I> itemMap = ArrayListMultimap.create();

    // put all the sets into list per keys. The order is important as the lower sets are
    // overridden by the higher sets.
    for (S dataSet : mDataSets) {
        ListMultimap<String, I> map = dataSet.getDataMap();
        for (Map.Entry<String, Collection<I>> entry : map.asMap().entrySet()) {
            itemMap.putAll(entry.getKey(), entry.getValue());
        }
    }

    // the items that represent the current state is the last item in the list for each key.
    for (String key : itemMap.keySet()) {
        List<I> itemList = itemMap.get(key);
        itemList.get(itemList.size() - 1).resetStatusToWritten();
    }
}
 
源代码3 项目: java-n-IDE-for-Android   文件: DataMerger.java
/**
 * Sets the post blob load state to TOUCHED.
 *
 * After a load from the blob file, all items have their state set to nothing.
 * If the load mode is not set to incrementalState then we want the items that are in the
 * current merge result to have their state be TOUCHED.
 *
 * This will allow the first use of {@link #mergeData(MergeConsumer, boolean)} to add these
 * to the consumer as if they were new items.
 *
 * @see #loadFromBlob(File, boolean)
 * @see DataItem#isTouched()
 */
private void setPostBlobLoadStateToTouched() {
    ListMultimap<String, I> itemMap = ArrayListMultimap.create();

    // put all the sets into list per keys. The order is important as the lower sets are
    // overridden by the higher sets.
    for (S dataSet : mDataSets) {
        ListMultimap<String, I> map = dataSet.getDataMap();
        for (Map.Entry<String, Collection<I>> entry : map.asMap().entrySet()) {
            itemMap.putAll(entry.getKey(), entry.getValue());
        }
    }

    // the items that represent the current state is the last item in the list for each key.
    for (String key : itemMap.keySet()) {
        List<I> itemList = itemMap.get(key);
        itemList.get(itemList.size() - 1).resetStatusToTouched();
    }
}
 
源代码4 项目: xtext-xtend   文件: XtendJvmModelInferrer.java
protected void appendSyntheticDispatchMethods(XtendTypeDeclaration source, final JvmGenericType target) {
	ListMultimap<DispatchHelper.DispatchSignature, JvmOperation> methods = dispatchHelper.getDeclaredOrEnhancedDispatchMethods(target);
	for (DispatchHelper.DispatchSignature signature : methods.keySet()) {
		List<JvmOperation> operations = methods.get(signature);
		Iterable<JvmOperation> localOperations = Iterables.filter(operations, new Predicate<JvmOperation>() {
			@Override
			public boolean apply(JvmOperation input) {
				return target == input.eContainer();
			}
		});
		JvmOperation operation = deriveGenericDispatchOperationSignature(localOperations, target);
		if (operation != null) {
			dispatchHelper.markAsDispatcherFunction(operation);
			operation.setSimpleName(signature.getSimpleName());
			operation.setReturnType(jvmTypesBuilder.inferredType());
		}
	}
}
 
源代码5 项目: artemis   文件: ServiceCluster.java
protected void updateClusterNodes() {
    ListMultimap<String, String> zoneIdNodeUrlsMap = _clusterNodesProperty.typedValue();
    _logger.info("ClusterNodes setting raw value: " + _clusterNodesProperty.value() + ", typedValue: "
            + zoneIdNodeUrlsMap);
    ListMultimap<Zone, ServiceNode> clusterNodes = ArrayListMultimap.create();
    for (String zoneId : zoneIdNodeUrlsMap.keySet()) {
        Zone zone = new Zone(_regionId, zoneId);
        for (String serviceUrl : zoneIdNodeUrlsMap.get(zoneId)) {
            if (StringValues.isNullOrWhitespace(serviceUrl))
                continue;
            ServiceNode peerNode = new ServiceNode(zone, serviceUrl);
            clusterNodes.put(zone, peerNode);
        }
    }

    if (clusterNodes.size() == 0) {
        _logger.warn("New ClusterNodes is empty. Skip to update");
        return;
    }

    _logger.info("ClusterNodes is updated. from: " + _clusterNodes + ", to: " + clusterNodes);
    _clusterNodes = clusterNodes;
}
 
源代码6 项目: artemis   文件: GroupRepository.java
protected Map<Long, GroupTags> getServiceGroupTags() {
    Map<Long, GroupTags> newGroupTags = Maps.newHashMap();
    ListMultimap<Long, GroupTagModel> m = ArrayListMultimap.create();
    for (GroupTagModel model : groupTagDao.query()) {
        m.put(model.getGroupId(), model);
    }

    for (Long id : m.keySet()) {
        Map<String, String> tags = Maps.newHashMap();
        for (GroupTagModel tag : m.get(id)) {
            tags.put(tag.getTag(), tag.getValue());
        }
        newGroupTags.put(id, new GroupTags(id, tags));
    }
    return newGroupTags;
}
 
源代码7 项目: Pushjet-Android   文件: TaskDetailPrinter.java
public void print(StyledTextOutput output) {
    final List<Task> tasks = sort(selection.getTasks());

    output.text("Detailed task information for ").withStyle(UserInput).println(taskPath);
    final ListMultimap<Class, Task> classListMap = groupTasksByType(tasks);

    final Set<Class> classes = classListMap.keySet();
    boolean multipleClasses = classes.size() > 1;
    final List<Class> sortedClasses = sort(classes, new Comparator<Class>() {
        public int compare(Class o1, Class o2) {
            return o1.getSimpleName().compareTo(o2.getSimpleName());
        }
    });
    for (Class clazz : sortedClasses) {
        output.println();
        final List<Task> tasksByType = classListMap.get(clazz);
        final LinePrefixingStyledTextOutput pathOutput = createIndentedOutput(output, INDENT);
        pathOutput.println(tasksByType.size() > 1 ? "Paths" : "Path");
        for (Task task : tasksByType) {
            pathOutput.withStyle(UserInput).println(task.getPath());
        }
        output.println();
        final LinePrefixingStyledTextOutput typeOutput = createIndentedOutput(output, INDENT);
        typeOutput.println("Type");
        typeOutput.withStyle(UserInput).text(clazz.getSimpleName());
        typeOutput.println(String.format(" (%s)", clazz.getName()));

        printlnCommandlineOptions(output, tasksByType);

        output.println();
        printTaskDescription(output, tasksByType);
        output.println();
        if (multipleClasses) {
            output.println("----------------------");
        }
    }
}
 
public List<PluginRequest> getRequests() {
    List<PluginRequest> pluginRequests = collect(specs, new Transformer<PluginRequest, DependencySpecImpl>() {
        public PluginRequest transform(DependencySpecImpl original) {
            return new DefaultPluginRequest(original.id, original.version, original.lineNumber, scriptSource);
        }
    });

    ListMultimap<PluginId, PluginRequest> groupedById = CollectionUtils.groupBy(pluginRequests, new Transformer<PluginId, PluginRequest>() {
        public PluginId transform(PluginRequest pluginRequest) {
            return pluginRequest.getId();
        }
    });

    // Check for duplicates
    for (PluginId key : groupedById.keySet()) {
        List<PluginRequest> pluginRequestsForId = groupedById.get(key);
        if (pluginRequestsForId.size() > 1) {
            PluginRequest first = pluginRequests.get(0);
            PluginRequest second = pluginRequests.get(1);

            InvalidPluginRequestException exception = new InvalidPluginRequestException(second, "Plugin with id '" + key + "' was already requested at line " + first.getLineNumber());
            throw new LocationAwareException(exception, second.getScriptSource(), second.getLineNumber());
        }
    }

    return pluginRequests;
}
 
源代码9 项目: pushfish-android   文件: TaskDetailPrinter.java
public void print(StyledTextOutput output) {
    final List<Task> tasks = sort(selection.getTasks());

    output.text("Detailed task information for ").withStyle(UserInput).println(taskPath);
    final ListMultimap<Class, Task> classListMap = groupTasksByType(tasks);

    final Set<Class> classes = classListMap.keySet();
    boolean multipleClasses = classes.size() > 1;
    final List<Class> sortedClasses = sort(classes, new Comparator<Class>() {
        public int compare(Class o1, Class o2) {
            return o1.getSimpleName().compareTo(o2.getSimpleName());
        }
    });
    for (Class clazz : sortedClasses) {
        output.println();
        final List<Task> tasksByType = classListMap.get(clazz);
        final LinePrefixingStyledTextOutput pathOutput = createIndentedOutput(output, INDENT);
        pathOutput.println(tasksByType.size() > 1 ? "Paths" : "Path");
        for (Task task : tasksByType) {
            pathOutput.withStyle(UserInput).println(task.getPath());
        }
        output.println();
        final LinePrefixingStyledTextOutput typeOutput = createIndentedOutput(output, INDENT);
        typeOutput.println("Type");
        typeOutput.withStyle(UserInput).text(clazz.getSimpleName());
        typeOutput.println(String.format(" (%s)", clazz.getName()));

        printlnCommandlineOptions(output, tasksByType);

        output.println();
        printTaskDescription(output, tasksByType);
        if (multipleClasses) {
            output.println();
            output.println("----------------------");
        }
    }
}
 
源代码10 项目: hmftools   文件: AmberApplication.java
@NotNull
private ListMultimap<Chromosome, BaseDepth> normalDepth(final SamReaderFactory readerFactory, final String bamPath,
        final ListMultimap<Chromosome, AmberSite> bedRegionsSortedSet) throws InterruptedException, ExecutionException {

    final int partitionSize = Math.max(config.minPartition(), bedRegionsSortedSet.size() / config.threadCount());

    LOGGER.info("Processing {} potential sites in reference bam {}", bedRegionsSortedSet.values().size(), bamPath);
    final AmberTaskCompletion completion = new AmberTaskCompletion();

    final List<Future<BaseDepthEvidence>> futures = Lists.newArrayList();
    for (final Chromosome contig : bedRegionsSortedSet.keySet()) {
        for (final List<AmberSite> inner : Lists.partition(Lists.newArrayList(bedRegionsSortedSet.get(contig)), partitionSize)) {
            final BaseDepthEvidence evidence = new BaseDepthEvidence(config.typicalReadDepth(),
                    config.minMappingQuality(),
                    config.minBaseQuality(),
                    inner.get(0).chromosome(),
                    bamPath,
                    readerFactory,
                    inner);
            futures.add(executorService.submit(completion.task(evidence)));
        }
    }

    final ListMultimap<Chromosome, BaseDepth> normalEvidence = ArrayListMultimap.create();
    getFuture(futures).forEach(x -> normalEvidence.putAll(HumanChromosome.fromString(x.contig()), x.evidence()));
    return normalEvidence;
}
 
源代码11 项目: hmftools   文件: AmberApplication.java
@NotNull
private ListMultimap<Chromosome, TumorBAF> tumorBAF(@NotNull final SamReaderFactory readerFactory,
        @NotNull final ListMultimap<Chromosome, BaseDepth> normalHetSites) throws ExecutionException, InterruptedException {
    final int partitionSize = Math.max(config.minPartition(), normalHetSites.values().size() / config.threadCount());

    LOGGER.info("Processing {} heterozygous sites in tumor bam {}", normalHetSites.values().size(), config.tumorBamPath());
    final AmberTaskCompletion completion = new AmberTaskCompletion();

    final List<Future<TumorBAFEvidence>> futures = Lists.newArrayList();
    for (final Chromosome chromosome : normalHetSites.keySet()) {
        for (final List<BaseDepth> chromosomeBafPoints : Lists.partition(normalHetSites.get(chromosome), partitionSize)) {
            if (!chromosomeBafPoints.isEmpty()) {
                final String contig = chromosomeBafPoints.get(0).chromosome();
                final TumorBAFEvidence evidence = new TumorBAFEvidence(config.typicalReadDepth(),
                        config.minMappingQuality(),
                        config.minBaseQuality(),
                        contig,
                        config.tumorBamPath(),
                        readerFactory,
                        chromosomeBafPoints);
                futures.add(executorService.submit(completion.task(evidence)));
            }
        }
    }

    final ListMultimap<Chromosome, TumorBAF> result = ArrayListMultimap.create();
    getFuture(futures).forEach(x -> result.putAll(HumanChromosome.fromString(x.contig()), x.evidence()));

    return result;
}
 
@NonNull
public Map<String, ResourceValue> getConfiguredResources(
        @NonNull Map<ResourceType, ListMultimap<String, ResourceItem>> itemMap,
        @NonNull ResourceType type,
        @NonNull FolderConfiguration referenceConfig) {
    // get the resource item for the given type
    ListMultimap<String, ResourceItem> items = itemMap.get(type);
    if (items == null) {
        return Maps.newHashMap();
    }

    Set<String> keys = items.keySet();

    // create the map
    Map<String, ResourceValue> map = Maps.newHashMapWithExpectedSize(keys.size());

    for (String key : keys) {
        List<ResourceItem> keyItems = items.get(key);

        // look for the best match for the given configuration
        // the match has to be of type ResourceFile since that's what the input list contains
        ResourceItem match = (ResourceItem) referenceConfig.findMatchingConfigurable(keyItems);
        if (match != null) {
            ResourceValue value = match.getResourceValue(mFramework);
            if (value != null) {
                map.put(match.getName(), value);
            }
        }
    }

    return map;
}
 
源代码13 项目: incubator-gobblin   文件: DistcpFileSplitter.java
/**
 * Finds all split work units in the input collection and merges the file parts into the expected output files.
 * @param fs {@link FileSystem} where file parts exist.
 * @param workUnits Collection of {@link WorkUnitState}s possibly containing split work units.
 * @return The collection of {@link WorkUnitState}s where split work units for each file have been merged.
 * @throws IOException
 */
public static Collection<WorkUnitState> mergeAllSplitWorkUnits(FileSystem fs, Collection<WorkUnitState> workUnits)
    throws IOException {
  ListMultimap<CopyableFile, WorkUnitState> splitWorkUnitsMap = ArrayListMultimap.create();
  for (WorkUnitState workUnit : workUnits) {
    if (isSplitWorkUnit(workUnit)) {
      CopyableFile copyableFile = (CopyableFile) CopySource.deserializeCopyEntity(workUnit);
      splitWorkUnitsMap.put(copyableFile, workUnit);
    }
  }

  for (CopyableFile file : splitWorkUnitsMap.keySet()) {
    log.info(String.format("Merging split file %s.", file.getDestination()));

    WorkUnitState oldWorkUnit = splitWorkUnitsMap.get(file).get(0);
    Path outputDir = FileAwareInputStreamDataWriter.getOutputDir(oldWorkUnit);
    CopyEntity.DatasetAndPartition datasetAndPartition =
        file.getDatasetAndPartition(CopySource.deserializeCopyableDataset(oldWorkUnit));
    Path parentPath = FileAwareInputStreamDataWriter.getOutputFilePath(file, outputDir, datasetAndPartition)
        .getParent();

    WorkUnitState newWorkUnit = mergeSplits(fs, file, splitWorkUnitsMap.get(file), parentPath);

    for (WorkUnitState wu : splitWorkUnitsMap.get(file)) {
      // Set to committed so that task states will not fail
      wu.setWorkingState(WorkUnitState.WorkingState.COMMITTED);
      workUnits.remove(wu);
    }
    workUnits.add(newWorkUnit);
  }
  return workUnits;
}
 
源代码14 项目: hmftools   文件: AmberApplication.java
@NotNull
private ListMultimap<Chromosome, TumorContamination> contamination(@NotNull final SamReaderFactory readerFactory,
        @NotNull final ListMultimap<Chromosome, BaseDepth> normalHomSites) throws ExecutionException, InterruptedException {
    final int partitionSize = Math.max(config.minPartition(), normalHomSites.values().size() / config.threadCount());

    LOGGER.info("Processing {} homozygous sites in tumor bam {} for contamination", normalHomSites.size(), config.tumorBamPath());
    final AmberTaskCompletion completion = new AmberTaskCompletion();

    final List<Future<TumorContaminationEvidence>> futures = Lists.newArrayList();
    for (final Chromosome chromosome : normalHomSites.keySet()) {
        for (final List<BaseDepth> chromosomeBafPoints : Lists.partition(normalHomSites.get(chromosome), partitionSize)) {
            if (!chromosomeBafPoints.isEmpty()) {
                final String contig = chromosomeBafPoints.get(0).chromosome();
                final TumorContaminationEvidence evidence = new TumorContaminationEvidence(config.typicalReadDepth(),
                        config.minMappingQuality(),
                        config.minBaseQuality(),
                        contig,
                        config.tumorBamPath(),
                        readerFactory,
                        chromosomeBafPoints);
                futures.add(executorService.submit(completion.task(evidence)));
            }
        }
    }

    final ListMultimap<Chromosome, TumorContamination> result = ArrayListMultimap.create();
    getFuture(futures).forEach(x -> result.putAll(HumanChromosome.fromString(x.contig()), x.evidence()));

    return result;
}
 
源代码15 项目: javaide   文件: AbstractResourceRepository.java
@NonNull
public Map<String, ResourceValue> getConfiguredResources(
        @NonNull Map<ResourceType, ListMultimap<String, ResourceItem>> itemMap,
        @NonNull ResourceType type,
        @NonNull FolderConfiguration referenceConfig) {
    // get the resource item for the given type
    ListMultimap<String, ResourceItem> items = itemMap.get(type);
    if (items == null) {
        return Maps.newHashMap();
    }

    Set<String> keys = items.keySet();

    // create the map
    Map<String, ResourceValue> map = Maps.newHashMapWithExpectedSize(keys.size());

    for (String key : keys) {
        List<ResourceItem> keyItems = items.get(key);

        // look for the best match for the given configuration
        // the match has to be of type ResourceFile since that's what the input list contains
        ResourceItem match = (ResourceItem) referenceConfig.findMatchingConfigurable(keyItems);
        if (match != null) {
            ResourceValue value = match.getResourceValue(mFramework);
            if (value != null) {
                map.put(match.getName(), value);
            }
        }
    }

    return map;
}
 
源代码16 项目: hmftools   文件: StructuralVariantLegsFactory.java
@NotNull
private static Set<GenomePosition> findDuplicatePositions(@NotNull final Collection<ModifiableStructuralVariantLegs> legs) {
    final ListMultimap<GenomePosition, ModifiableStructuralVariantLegs> result = ArrayListMultimap.create();
    for (ModifiableStructuralVariantLegs leg : legs) {
        leg.start().ifPresent(x -> result.put(cnaPosition(x), leg));
        leg.end().ifPresent(x -> result.put(cnaPosition(x), leg));
    }

    result.keySet().removeIf(key -> result.get(key).size() <= 1);
    return result.keySet();
}
 
源代码17 项目: xtext-extras   文件: RawResolvedFeatures.java
@Override
public List<JvmFeature> getAllFeatures() {
	if (!allFeaturesComputed) {
		ListMultimap<String, JvmFeature> featureIndex = computeAllFeatures();
		for(String simpleName: featureIndex.keySet()) {
			this.featureIndex.put(simpleName, Lists.newArrayList(featureIndex.get(simpleName)));
		}
		allFeaturesComputed = true;
	}
	List<JvmFeature> result = Lists.newArrayList();
	for(List<JvmFeature> list: featureIndex.values()) {
		result.addAll(list);
	}
	return result;
}
 
源代码18 项目: swift-t   文件: StructBuild.java
private void structBuildRec(Logger logger, Block block) {
  // Track all assigned struct paths
  ListMultimap<Var, List<String>> assignedPaths = ArrayListMultimap.create();

  // Find all struct assign statements in block
  for (Statement stmt: block.getStatements()) {
    if (stmt.type() == StatementType.INSTRUCTION) {
      Instruction inst = stmt.instruction();
      if (inst.op == Opcode.STRUCT_STORE_SUB) {
        Var struct = inst.getOutput(0);
        List<Arg> inputs = inst.getInputs();
        List<Arg> fields = inputs.subList(1, inputs.size());
        assignedPaths.put(struct, Arg.extractStrings(fields));
      }
    }
  }

  // Check if all fields were assigned
  for (Var candidate: assignedPaths.keySet()) {
    StructType candidateType = (StructType)candidate.type().getImplType();
    Set<List<String>> expectedPaths = allAssignablePaths(candidateType);
    List<List<String>> assigned = assignedPaths.get(candidate);

    logger.trace("Check candidate " + candidate.name() + "\n" +
                 "expected: " + expectedPaths + "\n" +
                 "assigned: " + assigned);

    for (List<String> path: assigned) {
      Type fieldType;
      try {
        fieldType = candidateType.fieldTypeByPath(path);
      } catch (TypeMismatchException e) {
        throw new STCRuntimeError(e.getMessage());
      }

      Set<List<String>> assignedSubPaths;
      if (Types.isStruct(fieldType)) {
        // Handle case where we assign a substruct
        StructType structFieldType = (StructType)fieldType.getImplType();
        assignedSubPaths = allAssignablePaths(structFieldType, path);
      } else {
        assignedSubPaths = Collections.singleton(path);
      }

      for (List<String> assignedPath: assignedSubPaths) {
        boolean found = expectedPaths.remove(assignedPath);
        if (!found) {
          logger.warn("Invalid or double-assigned struct field: " +
                       candidate.name() + "." + assignedPath);
        }
      }
    }
    if (expectedPaths.isEmpty()) {
      doStructBuildTransform(logger, block, candidate, assigned.size());
    } else if (logger.isTraceEnabled()) {
      logger.trace("Fields not assigned: " + expectedPaths);
    }
  }

  for (Continuation cont: block.allComplexStatements()) {
    for (Block cb: cont.getBlocks()) {
      structBuildRec(logger, cb);
    }
  }
}
 
源代码19 项目: artemis   文件: ClusterManager.java
private void updateNodesCache() {
    ListMultimap<Zone, ServiceNode> clusterNodes = _serviceCluster.clusterNodes();
    List<ServiceNode> localZoneNodes = new ArrayList<>();
    List<ServiceNode> otherZoneNodes = new ArrayList<>();
    List<ServiceNode> otherNodes = new ArrayList<>();
    List<ServiceNode> localZoneOtherNodes = new ArrayList<>();
    List<ServiceNode> allNodes = new ArrayList<>();
    for (Zone zone : clusterNodes.keySet()) {
        List<ServiceNode> nodes = clusterNodes.get(zone);
        if (zone.equals(_localZone)) {
            localZoneNodes.addAll(nodes);
            for (ServiceNode node : nodes) {
                if (isLocalNode(node)) {
                    _localNode.setUrl(node.getUrl());
                    continue;
                }

                localZoneOtherNodes.add(node);
            }

            continue;
        }

        otherZoneNodes.addAll(nodes);
    }

    otherNodes.addAll(localZoneOtherNodes);
    otherNodes.addAll(otherZoneNodes);

    if (localZoneNodes.size() > 0)
        _localZoneNodes = localZoneNodes;

    if (localZoneOtherNodes.size() > 0)
        _localZoneOtherNodes = localZoneOtherNodes;

    if (otherZoneNodes.size() > 0)
        _otherZoneNodes = otherZoneNodes;

    if (otherNodes.size() > 0)
        _otherNodes = otherNodes;

    allNodes.addAll(_localZoneNodes);
    allNodes.addAll(_otherZoneNodes);
    _allNodes = allNodes;
}
 
源代码20 项目: rice   文件: ActionListCustomizationMediatorImpl.java
/**
 * <p>partitions ActionItems by application id, and calls the appropriate
 * {@link ActionListCustomizationHandlerService} for each parition, merging the results.</p>
 *
 * <dl><dt><b>inherited docs:</b></dt><dd>{@inheritDoc}</dd></dl>
 */
@Override
public Map<String, ActionItemCustomization> getActionListCustomizations(String principalId,
        List<ActionItem> actionItems) throws RiceIllegalArgumentException {
    if (StringUtils.isBlank(principalId)) {
        throw new RiceIllegalArgumentException("invalid principalId: " + principalId);
    }
    if (actionItems == null) {
        actionItems = Collections.emptyList();
    }

    // map from action item ID to ActionItemCustomization
    Map<String, ActionItemCustomization> results = new HashMap<String, ActionItemCustomization>();

    // group each action item by application id that needs to be called for action list customizations (note that
    // the application id comes from the extension/rule attribute record, most action lists will have doc types
    // with no custom action list attribute, though the default still needs to be run in this case)

    ListMultimap<String, ActionItem> itemsByApplicationId = ArrayListMultimap.create();

    for (ActionItem actionItem : actionItems) {
        //DocumentType docType = KewApiServiceLocator.getDocumentTypeService().getDocumentTypeByName(actionItem.getDocName());
        DocumentType docType = getDocumentTypeService().findByName(actionItem.getDocName());
        if (docType == null) {
            LOG.error(String.format("Action item %s has an invalid document type name of %s",
                    actionItem.getId(), actionItem.getDocName()));
            // OK to have a null key, this represents the default app id
            itemsByApplicationId.put(null, actionItem);
        } else {
            // OK to have a null key, this represents the default app id
            itemsByApplicationId.put(getActionListCustomizationApplicationId(docType), actionItem);
        }
    }

    // For each application id, pass all action items which might need to be customized (because they have a
    // document type, which declares an action list attribute, which has an application id declared) to the
    // appropriate ActionListCustomizationHandlerService endpoint

    for (String applicationId : itemsByApplicationId.keySet()) {
        ActionListCustomizationHandlerService actionListCustomizationHandler =
                getActionListCustomizationHandlerServiceChooser().getByApplicationId(applicationId);

        if (actionListCustomizationHandler == null) {
            // get the local ActionListCustomizationHandlerService as a fallback
            actionListCustomizationHandler =
                    getActionListCustomizationHandlerServiceChooser().getByApplicationId(null);
        }

        List<ActionItemCustomization> customizations =
                actionListCustomizationHandler.customizeActionList(principalId, itemsByApplicationId.get(
                        applicationId));


        // Get back the customized results and reassemble with customized results from all different application
        // customizations (as well as default customizations)
        if (customizations != null) for (ActionItemCustomization customization : customizations) {
            results.put(customization.getActionItemId(), customization);
        }
    }

    return results;
}