@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); }
public List<String> merge(List<String> first, List<String> second) { return mergeStrategy.merge(first, second); }