Example usage for com.google.common.base Optional equals

List of usage examples for com.google.common.base Optional equals

Introduction

In this page you can find the example usage for com.google.common.base Optional equals.

Prototype

@Override
public abstract boolean equals(@Nullable Object object);

Source Link

Document

Returns true if object is an Optional instance, and either the contained references are Object#equals equal to each other or both are absent.

Usage

From source file:org.locationtech.geogig.api.plumbing.merge.MergeFeaturesOp.java

@SuppressWarnings("unchecked")
private Feature merge(RevFeature featureA, RevFeature featureB, RevFeature ancestor,
        RevFeatureType featureType) {/*from w w w  .j  a v a 2  s.c  o m*/

    SimpleFeatureBuilder featureBuilder = new SimpleFeatureBuilder((SimpleFeatureType) featureType.type());
    ImmutableList<Optional<Object>> valuesA = featureA.getValues();
    ImmutableList<Optional<Object>> valuesB = featureB.getValues();
    ImmutableList<Optional<Object>> valuesAncestor = ancestor.getValues();
    ImmutableList<PropertyDescriptor> descriptors = featureType.sortedDescriptors();
    for (int i = 0; i < descriptors.size(); i++) {
        PropertyDescriptor descriptor = descriptors.get(i);
        boolean isGeom = Geometry.class.isAssignableFrom(descriptor.getType().getBinding());
        Name name = descriptor.getName();
        Optional<Object> valueAncestor = valuesAncestor.get(i);
        Optional<Object> valueA = valuesA.get(i);
        Optional<Object> valueB = valuesB.get(i);
        if (!valueA.equals(valueAncestor)) {
            Optional<Object> merged = valueA;
            if (isGeom && !valueB.equals(valueAncestor)) { // true merge is only done with
                                                           // geometries
                GeometryAttributeDiff diffB = new GeometryAttributeDiff(
                        Optional.fromNullable((Geometry) valueAncestor.orNull()),
                        Optional.fromNullable((Geometry) valueB.orNull()));
                merged = (Optional<Object>) diffB.applyOn(valueA);
            }
            featureBuilder.set(name, merged.orNull());
        } else {
            featureBuilder.set(name, valueB.orNull());
        }
    }
    return featureBuilder.buildFeature(nodeRefA.name());

}

From source file:org.geogit.api.plumbing.diff.GeometryAttributeDiff.java

@Override
public boolean canBeAppliedOn(Optional<?> obj) {
    switch (type) {
    case ADDED:/*ww  w.  j a  va2  s .  c  o m*/
        return obj == null;
    case REMOVED:
        return obj.equals(oldGeometry);
    case MODIFIED:
    default:
        return diff.canBeAppliedOn((Optional<Geometry>) obj);
    }

}

From source file:org.locationtech.geogig.api.plumbing.diff.GeometryAttributeDiff.java

@SuppressWarnings("unchecked")
@Override/* ww w  .  j  a  v  a 2  s. c  o m*/
public boolean canBeAppliedOn(Optional<?> obj) {
    switch (type) {
    case ADDED:
        return obj == null;
    case REMOVED:
        return obj.equals(oldGeometry);
    case MODIFIED:
    default:
        return diff.canBeAppliedOn((Optional<Geometry>) obj);
    }

}

From source file:com.github.rinde.logistics.pdptw.mas.route.GotoClosestRoutePlanner.java

private void updateCurrent() {
    final Optional<Parcel> prev = current;
    if (parcels.isEmpty()) {
        current = Optional.absent();
    } else {//w ww. j a v a 2  s . c o  m
        current = Optional.of(Collections.min(parcels, comp));
    }
    if (!prev.equals(current)) {
        dispatchChangeEvent();
    }
}

From source file:org.apache.aurora.scheduler.http.LeaderRedirect.java

/**
 * Gets the current status of the elected leader.
 *
 * @return a {@code LeaderStatus} indicating whether there is an elected leader (and if so, if
 * this instance is the leader).//from   ww w.  j  a v a  2s  .c om
 */
LeaderStatus getLeaderStatus() {
    Optional<ServiceInstance> leadingScheduler = getLeader();
    if (!leadingScheduler.isPresent()) {
        return LeaderStatus.NO_LEADER;
    }

    if (!leadingScheduler.get().isSetServiceEndpoint()) {
        LOG.warn("Leader service instance seems to be incomplete: " + leadingScheduler);
        return LeaderStatus.NO_LEADER;
    }

    Optional<HostAndPort> leaderHttp = getLeaderHttp();
    Optional<HostAndPort> localHttp = getLocalHttp();

    if (leaderHttp.isPresent() && leaderHttp.equals(localHttp)) {
        return LeaderStatus.LEADING;
    }

    return LeaderStatus.NOT_LEADING;
}

From source file:org.apache.aurora.scheduler.http.LeaderRedirect.java

/**
 * Gets the optional HTTP endpoint that should be redirected to in the event that this
 * scheduler is not the leader.//w  w  w. j a va2 s .c  om
 *
 * @return Optional redirect target.
 */
@VisibleForTesting
Optional<HostAndPort> getRedirect() {
    Optional<HostAndPort> leaderHttp = getLeaderHttp();
    Optional<HostAndPort> localHttp = getLocalHttp();

    if (leaderHttp.isPresent()) {
        if (leaderHttp.equals(localHttp)) {
            return Optional.absent();
        } else {
            return leaderHttp;
        }
    } else {
        LOG.info("No leader found, not redirecting.");
        return Optional.absent();
    }
}

From source file:org.apache.aurora.scheduler.TaskVars.java

@Subscribe
public void taskChangedState(TaskStateChange stateChange) {
    IScheduledTask task = stateChange.getTask();
    Optional<ScheduleStatus> previousState = stateChange.getOldState();

    if (stateChange.isTransition() && !previousState.equals(Optional.of(ScheduleStatus.INIT))) {
        decrementCount(previousState.get());
    }//from  w w w.  jav a  2 s . c o m
    incrementCount(task.getStatus());

    updateRackCounters(task, task.getStatus());
    updateJobCounters(task, task.getStatus());
}

From source file:org.geogit.api.plumbing.diff.TreeDifference.java

/**
 * Finds tree pointers that point to the same tree (path and object id) on the left and right
 * sides of the comparison but have different {@link NodeRef#getMetadataId() metadata ids}
 *///from  www  .  j  a  v a  2 s . c  om
public Map<NodeRef, NodeRef> findPureMetadataChanges() {
    SortedMap<String, MutableTree> leftEntries = leftTree.getChildrenAsMap();
    SortedMap<String, MutableTree> rightEntries = rightTree.getChildrenAsMap();

    Map<NodeRef, NodeRef> matches = Maps.newTreeMap();

    for (Map.Entry<String, MutableTree> e : leftEntries.entrySet()) {
        final String nodePath = e.getKey();

        final MutableTree leftTree = e.getValue();
        final Node leftNode = leftTree.getNode();

        @Nullable
        final MutableTree rightTree = rightEntries.get(nodePath);
        final Node rightNode = rightTree == null ? null : rightTree.getNode();

        if (leftNode.equals(rightNode)) {
            final Optional<ObjectId> leftMetadata = leftNode.getMetadataId();
            final Optional<ObjectId> rightMetadata = rightNode.getMetadataId();
            if (!leftMetadata.equals(rightMetadata)) {
                String parentPath = NodeRef.parentPath(nodePath);
                NodeRef leftRef = new NodeRef(leftNode, parentPath, ObjectId.NULL);
                NodeRef rightRef = new NodeRef(rightNode, parentPath, ObjectId.NULL);
                matches.put(leftRef, rightRef);
            }
        }
    }
    return matches;
}

From source file:org.locationtech.geogig.api.plumbing.merge.ReportCommitConflictsOp.java

@Override
protected MergeScenarioReport _call() {

    MergeScenarioReport report = new MergeScenarioReport();

    ObjectId parentCommitId = ObjectId.NULL;
    if (commit.getParentIds().size() > 0) {
        parentCommitId = commit.getParentIds().get(0);
    }/*  ww  w. j  a  v a2 s  . c o  m*/
    ObjectId parentTreeId = ObjectId.NULL;
    Repository repository = repository();
    if (repository.commitExists(parentCommitId)) {
        parentTreeId = repository.getCommit(parentCommitId).getTreeId();
    }
    // get changes
    Iterator<DiffEntry> diffs = command(DiffTree.class).setOldTree(parentTreeId).setNewTree(commit.getTreeId())
            .setReportTrees(true).call();

    while (diffs.hasNext()) {
        DiffEntry diff = diffs.next();
        String path = diff.oldPath() == null ? diff.newPath() : diff.oldPath();
        Optional<RevObject> obj = command(RevObjectParse.class).setRefSpec(Ref.HEAD + ":" + path).call();
        switch (diff.changeType()) {
        case ADDED:
            if (obj.isPresent()) {
                TYPE type = command(ResolveObjectType.class).setObjectId(diff.getNewObject().objectId()).call();
                if (TYPE.TREE.equals(type)) {
                    NodeRef headVersion = command(FindTreeChild.class).setChildPath(path)
                            .setParent(repository.getOrCreateHeadTree()).call().get();
                    if (!headVersion.getMetadataId().equals(diff.getNewObject().getMetadataId())) {
                        report.addConflict(new Conflict(path, ObjectId.NULL,
                                diff.getNewObject().getMetadataId(), headVersion.getMetadataId()));
                    }
                } else {
                    if (!obj.get().getId().equals(diff.newObjectId())) {
                        report.addConflict(
                                new Conflict(path, ObjectId.NULL, diff.newObjectId(), obj.get().getId()));
                    }
                }
            } else {
                report.addUnconflicted(diff);
            }
            break;
        case REMOVED:
            if (obj.isPresent()) {
                if (obj.get().getId().equals(diff.oldObjectId())) {
                    report.addUnconflicted(diff);
                } else {
                    report.addConflict(
                            new Conflict(path, diff.oldObjectId(), ObjectId.NULL, obj.get().getId()));
                }
            }
            break;
        case MODIFIED:
            TYPE type = command(ResolveObjectType.class).setObjectId(diff.getNewObject().objectId()).call();
            if (TYPE.TREE.equals(type)) {
                // TODO:see how to do this. For now, we will pass any change as a conflicted
                // one
                if (!diff.isChange()) {
                    report.addUnconflicted(diff);
                }
            } else {
                String refSpec = Ref.HEAD + ":" + path;
                obj = command(RevObjectParse.class).setRefSpec(refSpec).call();
                if (!obj.isPresent()) {
                    // git reports this as a conflict but does not mark as conflicted, just adds
                    // the missing file.
                    // We add it and consider it unconflicted
                    report.addUnconflicted(diff);
                    break;
                }
                RevFeature feature = (RevFeature) obj.get();
                DepthSearch depthSearch = new DepthSearch(repository.objectDatabase());
                Optional<NodeRef> noderef = depthSearch.find(this.workingTree().getTree(), path);
                RevFeatureType featureType = command(RevObjectParse.class)
                        .setObjectId(noderef.get().getMetadataId()).call(RevFeatureType.class).get();
                ImmutableList<PropertyDescriptor> descriptors = featureType.sortedDescriptors();
                FeatureDiff featureDiff = command(DiffFeature.class)
                        .setOldVersion(Suppliers.ofInstance(diff.getOldObject()))
                        .setNewVersion(Suppliers.ofInstance(diff.getNewObject())).call();
                Set<Entry<PropertyDescriptor, AttributeDiff>> attrDiffs = featureDiff.getDiffs().entrySet();
                RevFeature newFeature = command(RevObjectParse.class).setObjectId(diff.newObjectId())
                        .call(RevFeature.class).get();
                boolean ok = true;
                for (Iterator<Entry<PropertyDescriptor, AttributeDiff>> iterator = attrDiffs
                        .iterator(); iterator.hasNext() && ok;) {
                    Entry<PropertyDescriptor, AttributeDiff> entry = iterator.next();
                    AttributeDiff attrDiff = entry.getValue();
                    PropertyDescriptor descriptor = entry.getKey();
                    switch (attrDiff.getType()) {
                    case ADDED:
                        if (descriptors.contains(descriptor)) {
                            ok = false;
                        }
                        break;
                    case REMOVED:
                    case MODIFIED:
                        if (!descriptors.contains(descriptor)) {
                            ok = false;
                            break;
                        }
                        for (int i = 0; i < descriptors.size(); i++) {
                            if (descriptors.get(i).equals(descriptor)) {
                                Optional<Object> value = feature.getValues().get(i);
                                Optional<Object> newValue = newFeature.getValues().get(i);
                                if (!newValue.equals(value)) { // if it's going to end up
                                                               // setting the same value, it is
                                                               // compatible, so no need to
                                                               // check
                                    if (!attrDiff.canBeAppliedOn(value)) {
                                        ok = false;
                                    }
                                    break;
                                }
                            }
                        }
                    }
                }
                if (ok) {
                    report.addUnconflicted(diff);
                } else {
                    report.addConflict(
                            new Conflict(path, diff.oldObjectId(), diff.newObjectId(), obj.get().getId()));
                }
            }

            break;
        }

    }

    return report;

}

From source file:org.opendaylight.yangtools.yang.data.impl.schema.tree.ModifiedNode.java

TreeNode getValidatedNode(final SchemaAwareApplyOperation op, final Optional<TreeNode> current) {
    return op.equals(validatedOp) && current.equals(validatedCurrent) ? validatedNode : null;
}