package com.constellio.model.entities.schemas;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.constellio.data.utils.KeySetMap;
public class MetadataNetwork {
List<MetadataNetworkLink> links;
Map<String, List<MetadataNetworkLink>> linksFromMetadata;
Map<String, List<MetadataNetworkLink>> linksToMetadata;
public MetadataNetwork(List<MetadataNetworkLink> links,
Map<String, List<MetadataNetworkLink>> linksFromMetadata,
Map<String, List<MetadataNetworkLink>> linksToMetadata) {
this.links = links;
this.linksFromMetadata = linksFromMetadata;
this.linksToMetadata = linksToMetadata;
}
public List<MetadataNetworkLink> getLinks() {
return links;
}
public List<MetadataNetworkLink> getLinksFrom(String metadataCode) {
List<MetadataNetworkLink> links = linksFromMetadata.get(metadataCode);
return links == null ? Collections.<MetadataNetworkLink>emptyList() : Collections.unmodifiableList(links);
}
public List<MetadataNetworkLink> getLinksFrom(Metadata metadata) {
List<MetadataNetworkLink> links = linksFromMetadata.get(metadata.getCode());
return links == null ? Collections.<MetadataNetworkLink>emptyList() : Collections.unmodifiableList(links);
}
public List<MetadataNetworkLink> getLinksTo(String metadataCode) {
List<MetadataNetworkLink> links = linksToMetadata.get(metadataCode);
return links == null ? Collections.<MetadataNetworkLink>emptyList() : Collections.unmodifiableList(links);
}
public List<MetadataNetworkLink> getLinksTo(Metadata metadata) {
List<MetadataNetworkLink> links = linksToMetadata.get(metadata.getCode());
return links == null ? Collections.<MetadataNetworkLink>emptyList() : Collections.unmodifiableList(links);
}
public static MetadataNetwork EMPTY() {
return new MetadataNetwork(Collections.<MetadataNetworkLink>emptyList(),
Collections.<String, List<MetadataNetworkLink>>emptyMap(),
Collections.<String, List<MetadataNetworkLink>>emptyMap()
);
}
public int getMaxLevelOf(String typeCode) {
int max = 0;
for (MetadataNetworkLink link : links) {
if (link.getFromMetadata().getCode().startsWith(typeCode + "_")) {
max = Math.max(max, link.getLevel());
}
}
return max;
}
}