Пример #1
0
  @Override
  public void mergeWith(IdentifiableObject other, MergeStrategy strategy) {
    super.mergeWith(other, strategy);

    if (other.getClass().isInstance(this)) {
      BaseAnalyticalObject object = (BaseAnalyticalObject) other;

      this.clear();

      if (strategy.isReplace()) {
        relatives = object.getRelatives();
        aggregationType = object.getAggregationType();
      } else if (strategy.isMerge()) {
        relatives = object.getRelatives() == null ? relatives : object.getRelatives();
        aggregationType =
            object.getAggregationType() == null ? aggregationType : object.getAggregationType();
      }

      indicators.addAll(object.getIndicators());
      dataElements.addAll(object.getDataElements());
      dataElementOperands.addAll(object.getDataElementOperands());
      dataSets.addAll(object.getDataSets());
      periods.addAll(object.getPeriods());
      organisationUnits.addAll(object.getOrganisationUnits());
      dataElementGroups.addAll(object.getDataElementGroups());
      organisationUnitGroups.addAll(object.getOrganisationUnitGroups());
      organisationUnitLevels.addAll(object.getOrganisationUnitLevels());
      categoryDimensions.addAll(object.getCategoryDimensions());
      categoryOptionGroups.addAll(object.getCategoryOptionGroups());
      attributeDimensions.addAll(object.getAttributeDimensions());
      dataElementDimensions.addAll(object.getDataElementDimensions());
      userOrganisationUnitChildren = object.isUserOrganisationUnitChildren();
      userOrganisationUnitGrandChildren = object.isUserOrganisationUnitGrandChildren();
      itemOrganisationUnitGroups = object.getItemOrganisationUnitGroups();
      rewindRelativePeriods = object.isRewindRelativePeriods();
      digitGroupSeparator = object.getDigitGroupSeparator();
      userOrganisationUnit = object.isUserOrganisationUnit();
      sortOrder = object.getSortOrder();
      topLimit = object.getTopLimit();
    }
  }
  @Override
  public void run(final TaskMonitor taskMonitor) {
    taskMonitor.setTitle("Adding variations...");
    taskMonitor.setProgress(0.0d);

    if (!mergeStrategy.isRetain()) {
      final Lock nodesReadLock = model.nodes().getReadWriteLock().readLock();
      final Lock featuresReadLock = model.features().getReadWriteLock().readLock();
      final Lock variationsWriteLock = model.variations().getReadWriteLock().writeLock();
      nodesReadLock.lock();
      featuresReadLock.lock();
      variationsWriteLock.lock();
      try {
        for (int i = 0, size = model.features().size(); i < size; i++) {
          Feature feature = model.features().get(i);
          taskMonitor.setStatusMessage(
              "Retrieving variations associated with feature " + feature + "...");
          final List<Variation> variations = model.getVariationService().variations(feature);
          taskMonitor.setStatusMessage(
              resultStatusMessage(variations.size(), "variation", "feature", feature));

          // todo:  merge strategy
          for (Variation variation : variations) {
            if (!model.variations().contains(variation)) {
              model.variations().add(variation);
            }
          }

          // todo:  count doesn't consider existing variations
          for (CyNode node : model.nodesFor(feature)) {
            addCount(node, model.getNetwork(), "variation_count", variations.size());
          }
          taskMonitor.setProgress(i / (double) size);
        }
      } finally {
        nodesReadLock.unlock();
        featuresReadLock.unlock();
        variationsWriteLock.unlock();
      }
    }
    taskMonitor.setProgress(1.0d);
  }
Пример #3
0
 public List<String> merge(List<String> first, List<String> second) {
   return mergeStrategy.merge(first, second);
 }