use of io.fixprotocol._2020.orchestra.repository.Sections in project fix-orchestra by FIXTradingCommunity.
the class RepositoryCompressor method compress.
private boolean compress(InputStream is, OutputStream os, Predicate<? super MessageType> messagePredicate) {
try {
final Repository inRepository = unmarshal(is);
final Categories categories = inRepository.getCategories();
isCategoryInSection.setCategories(categories.getCategory());
final Repository outRepository = new Repository();
inRepository.copyTo(null, outRepository, AttributeCopyStrategy.INSTANCE);
final ElementOrRefinementContainer metadata = (ElementOrRefinementContainer) inRepository.getMetadata().clone();
final List<JAXBElement<SimpleLiteral>> literals = metadata.getAny();
final ObjectFactory objectFactory = new ObjectFactory();
final SimpleLiteral contributor = new SimpleLiteral();
contributor.getContent().add("RepositoryCompressor");
literals.add(objectFactory.createContributor(contributor));
outRepository.setMetadata(metadata);
if (categories != null) {
outRepository.setCategories((Categories) categories.clone());
}
final Sections sections = inRepository.getSections();
if (sections != null) {
outRepository.setSections((Sections) sections.clone());
}
final Datatypes datatypes = inRepository.getDatatypes();
if (datatypes != null) {
outRepository.setDatatypes((Datatypes) datatypes.clone());
}
final Actors actors = inRepository.getActors();
if (actors != null) {
outRepository.setActors((Actors) actors.clone());
}
final Components components = inRepository.getComponents();
if (components != null) {
final Components inComponents = (Components) components.clone();
componentList = inComponents.getComponent();
}
final Groups groups = inRepository.getGroups();
if (groups != null) {
final Groups inGroups = (Groups) groups.clone();
groupList = inGroups.getGroup();
}
final Messages messages = inRepository.getMessages();
final List<MessageType> messageList;
if (messages != null) {
final Messages inMessages = (Messages) messages.clone();
messageList = inMessages.getMessage();
} else {
messageList = Collections.emptyList();
}
final List<MessageType> filteredMessages = messageList.stream().filter(messagePredicate).collect(Collectors.toList());
filteredMessages.forEach(m -> walk(m.getStructure().getComponentRefOrGroupRefOrFieldRef()));
final List<BigInteger> distinctFieldIds = fieldIdList.stream().distinct().collect(Collectors.toList());
final Fields inFields = (Fields) inRepository.getFields().clone();
final List<FieldType> fieldsWithFlow = inFields.getField().stream().filter(f -> distinctFieldIds.contains(f.getId())).collect(Collectors.toList());
final Fields outFields = new Fields();
outFields.getField().addAll(fieldsWithFlow);
outRepository.setFields(outFields);
final List<String> typeList = fieldsWithFlow.stream().map(FieldType::getType).distinct().collect(Collectors.toList());
final CodeSets inCodeSets = (CodeSets) inRepository.getCodeSets().clone();
final List<CodeSetType> codeSetsWithFlow = inCodeSets.getCodeSet().stream().filter(cs -> typeList.contains(cs.getName())).collect(Collectors.toList());
final CodeSets outCodeSets = new CodeSets();
outCodeSets.getCodeSet().addAll(codeSetsWithFlow);
outRepository.setCodeSets(outCodeSets);
final List<BigInteger> distinctComponentsIds = componentIdList.stream().distinct().collect(Collectors.toList());
final List<ComponentType> componentsWithFlow = componentList.stream().filter(c -> distinctComponentsIds.contains(c.getId())).collect(Collectors.toList());
final Components outComponents = new Components();
outComponents.getComponent().addAll(componentsWithFlow);
outRepository.setComponents(outComponents);
final List<BigInteger> distinctGroupIds = groupIdList.stream().distinct().collect(Collectors.toList());
final List<GroupType> groupWithFlow = groupList.stream().filter(c -> distinctGroupIds.contains(c.getId())).collect(Collectors.toList());
final Groups outGroups = new Groups();
outGroups.getGroup().addAll(groupWithFlow);
outRepository.setGroups(outGroups);
final Messages outMessages = new Messages();
outMessages.getMessage().addAll(filteredMessages);
outRepository.setMessages(outMessages);
marshal(outRepository, os);
return true;
} catch (JAXBException e) {
logger.fatal("RepositoryCompressor failed", e);
return false;
}
}
Aggregations