Package org.netmelody.cieye.server.observation

Source Code of org.netmelody.cieye.server.observation.TrustedSpy

package org.netmelody.cieye.server.observation;

import java.util.Map;

import org.netmelody.cieye.core.domain.Feature;
import org.netmelody.cieye.core.domain.Status;
import org.netmelody.cieye.core.domain.TargetDetail;
import org.netmelody.cieye.core.domain.TargetDigest;
import org.netmelody.cieye.core.domain.TargetDigestGroup;
import org.netmelody.cieye.core.domain.TargetId;
import org.netmelody.cieye.core.observation.CiSpy;

import com.google.common.collect.ImmutableList;

import static com.google.common.collect.Maps.newHashMap;

public final class TrustedSpy implements CiSpy {

    private final CiSpy untrustedSpy;
    private final Map<TargetId, TargetDigest> emptyFeatureTargets = newHashMap();

    public TrustedSpy(CiSpy untrustedSpy) {
        this.untrustedSpy = untrustedSpy;
    }

    @Override
    public TargetDigestGroup targetsConstituting(Feature feature) {
        final TargetDigestGroup untrustedResult = untrustedSpy.targetsConstituting(feature);
        final TargetDigestGroup result = (untrustedResult == null) ? new TargetDigestGroup() : untrustedResult;
       
        if (result.isEmpty()) {
            final TargetId noTargetId = new TargetId("UNK_" + feature.endpoint() + feature.name());
            TargetDigest noTarget = emptyFeatureTargets.get(noTargetId);
            if (null == noTarget) {
                noTarget = new TargetDigest(noTargetId.id(), feature.endpoint(), "EMPTY: " + feature.name(), Status.BROKEN);
                emptyFeatureTargets.put(noTargetId, noTarget);
            }
            return new TargetDigestGroup(ImmutableList.of(noTarget));
        }
        return result;
    }

    @Override
    public TargetDetail statusOf(TargetId targetId) {
        if (emptyFeatureTargets.containsKey(targetId)) {
            final TargetDigest noTarget = emptyFeatureTargets.get(targetId);
            return new TargetDetail(targetId.id(), noTarget.webUrl(), noTarget.name(), noTarget.status(), 0L);
        }
        final TargetDetail untrustedResult = untrustedSpy.statusOf(targetId);
        return (untrustedResult == null) ? new TargetDetail(targetId.id(), "", "", Status.UNKNOWN, 0L) : untrustedResult;
    }

    @Override
    public boolean takeNoteOf(TargetId target, String note) {
        return untrustedSpy.takeNoteOf(target, note);
    }

}
TOP

Related Classes of org.netmelody.cieye.server.observation.TrustedSpy

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.