Package org.netmelody.cieye.spies.demo

Source Code of org.netmelody.cieye.spies.demo.DemoModeSpy$TargetInfo

package org.netmelody.cieye.spies.demo;

import static com.google.common.cache.CacheLoader.from;
import static com.google.common.collect.Lists.newArrayList;
import static com.google.common.collect.Maps.newHashMap;
import static org.netmelody.cieye.core.domain.Status.UNKNOWN;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.netmelody.cieye.core.domain.Feature;
import org.netmelody.cieye.core.domain.Percentage;
import org.netmelody.cieye.core.domain.RunningBuild;
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 org.netmelody.cieye.core.observation.KnownOffendersDirectory;
import org.netmelody.cieye.spies.demo.DemoModeFakeCiServer.BuildData;
import org.netmelody.cieye.spies.demo.DemoModeFakeCiServer.TargetData;

import com.google.common.base.Function;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.LoadingCache;

public final class DemoModeSpy implements CiSpy {

    private final LoadingCache<String, DemoModeFakeCiServer> demoCiServers =
        CacheBuilder.newBuilder().build(from(new Function<String, DemoModeFakeCiServer>() {
            @Override
            public DemoModeFakeCiServer apply(String featureName) {
                return new DemoModeFakeCiServer(featureName);
            }
        }));
   
    private final KnownOffendersDirectory detective;

    private static final class TargetInfo {
        public final String featureName;
        public final String targetName;
        public TargetInfo(String featureName, String targetName) {
            this.featureName = featureName;
            this.targetName = targetName;
        }
    }
   
    private final Map<TargetId, TargetInfo> recognisedTargets = newHashMap();
   
    public DemoModeSpy(final KnownOffendersDirectory detective) {
        this.detective = detective;
    }
   
    @Override
    public TargetDigestGroup targetsConstituting(Feature feature) {
        final String featureName = feature.name();
        final List<TargetDigest> digests = newArrayList();
       
        for (String targetName : demoCiServers.getUnchecked(featureName).getTargetNames()) {
            TargetDigest digest = new TargetDigest(featureName+targetName, "http://www.example.com/", targetName, UNKNOWN);
            digests.add(digest);
            recognisedTargets.put(digest.id(), new TargetInfo(featureName, targetName));
        }
       
        return new TargetDigestGroup(digests);
    }
   
    @Override
    public TargetDetail statusOf(final TargetId target) {
        final TargetInfo targetInfo = recognisedTargets.get(target);
        if (null == targetInfo) {
            return null;
        }
        return detailsOf(targetInfo.featureName, targetInfo.targetName);
    }

    private TargetDetail detailsOf(String featureName, String targetName) {
        final DemoModeFakeCiServer ciServer = demoCiServers.getUnchecked(featureName);
        final TargetData data = ciServer.getDataFor(targetName);
        final List<RunningBuild> builds = new ArrayList<RunningBuild>();
       
        final StringBuilder commentry = new StringBuilder();
        for (BuildData buildData : data.builds) {
            builds.add(new RunningBuild(Percentage.percentageOf(buildData.progress),
                                 buildData.green ? Status.GREEN : data.note.isEmpty() ? Status.BROKEN : Status.UNDER_INVESTIGATION));
            commentry.append(buildData.checkinComments);
        }
       
        Status status = data.green ? Status.GREEN : (data.note.isEmpty() ? Status.BROKEN : Status.UNDER_INVESTIGATION);
        return new TargetDetail(featureName+targetName, data.url, targetName, status, 0L, builds, detective.search(commentry.toString()));
    }

    @Override
    public boolean takeNoteOf(TargetId target, String note) {
        if (!recognisedTargets.containsKey(target)) {
            return false;
        }
       
        final TargetInfo targetInfo = recognisedTargets.get(target);
        demoCiServers.getUnchecked(targetInfo.featureName).addNote(targetInfo.targetName, note);
        return true;
    }
}
TOP

Related Classes of org.netmelody.cieye.spies.demo.DemoModeSpy$TargetInfo

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.