private YAncestor getFirstNotVisitedAncestor(YStructure structure, Set<String> visitedElements) { final List<YAncestor> ancestors = structure.getAncestors(); for (int ancestorIndex = ancestors.size() - 1; ancestorIndex >= 0; ancestorIndex--) { final YAncestor currentAncestor = ancestors.get(ancestorIndex); if (!visitedElements.contains(currentAncestor.getIdentity())) { return currentAncestor; } } return null; }
private String findDoubledLevel(YElement element) { YStructure structure = element.getStructure(HierarchyWithLevelIds.EXT_HIERARCHY_JOURNAL); if (structure == null) { return null; } List<YAncestor> ancestors = structure.getAncestors(); Set<String> existingLevels = new HashSet<String>(); for (YAncestor yAncestor : ancestors) { String level = yAncestor.getLevel(); if (level != null) { if (existingLevels.contains(level)) { return level; } else { existingLevels.add(level); } } } return null; }
private Map<String, YDate> extractDatesFromHierarchy(final List<YStructure> structures) { Map<String, YDate> dates = new HashMap<>(); for (final YStructure structure : structures) { for (final YAncestor ancestor : structure.getAncestors()) { dates.putAll(processYDates(ancestor.getDates())); if (HierarchyWithLevelIds.EXT_LEVEL_JOURNAL_YEAR.equals(ancestor.getLevel())) { dates.put("hierarchy", getDateFromYear(ancestor)); } } } return dates; }
private YAncestor setNonIssueAncestorsAndGetExisitingIssue(String issueId, YStructure journal) { YAncestor existingIssue = null; List<YAncestor> nonIssueAncestors = new ArrayList<>(); for(YAncestor ancestor : journal.getAncestors()) { boolean isNotIssue = !ancestor.getLevel().equals(YConstants.EXT_LEVEL_JOURNAL_ISSUE); boolean isCurrentIssue = ancestor.getIdentity().equals(issueId); if(isNotIssue) { nonIssueAncestors.add(ancestor); } else if(isCurrentIssue) { existingIssue = ancestor; } else { // ignore/remove non current issues } } journal.setAncestors(nonIssueAncestors); return existingIssue; }
public static Map<String, IdentifiersData> collectIdentifiers(YElement element) { Map<String, IdentifiersData> data = new HashMap<>(); for (YStructure structure : element.getStructures()) { for (YAncestor ancestor : structure.getAncestors()) { if(SUPPORTRED_LEVELS.contains(ancestor.getLevel())){ data.putAll(collectObjectIdentifiers(ancestor, ancestor.getLevel())); } } } data.putAll(collectObjectIdentifiers(element, StringUtils.EMPTY)); return data; }
private ThumbnailRef findThumbnailPathInAncestors(YElement element) { List<YStructure> yStructures = element.getStructures(); for (YStructure yStructure : yStructures) { List<YAncestor> ancestors = Lists.reverse(yStructure.getAncestors()); for (YAncestor yAncestor : ancestors) { ThumbnailRef thumbnailPath = findThumbnailPath(yAncestor, yAncestor.getIdentity()); if (thumbnailPath != null) { return thumbnailPath; } } } return null; }
@Override public YStructure build(PublicationMeta meta, List<YElement> ancestors) { if (isAlreadyBuilt(meta, ancestors)) { return null; } YStructure structure = new YStructure(getSupportedHierarchyId()); YElement directAncestor = null; if (!ancestors.isEmpty()) { directAncestor = ancestors.get(ancestors.size() - 1); YStructure parentStructure = directAncestor.getStructure(getSupportedHierarchyId()); structure.getAncestors().addAll(parentStructure.getAncestors()); YAncestor ancestor = new YAncestor(structure.getHierarchy()); ancestor.setLevel(getLevel(directAncestor)); AncestorsManagement.copyDataToAncestor(directAncestor, ancestor); structure.getAncestors().add(ancestor); } structure.setCurrent(getCurrent(meta, directAncestor)); return structure; }
private static void replaceJournalNameField(final YElement yElement, final String[] values) { if (values != null && values.length > 0) { } final YStructure structure = yElement.getStructure(YConstants.EXT_HIERARCHY_JOURNAL); if (structure != null) { for (final YAncestor ancestor : structure.getAncestors()) { final String level = ancestor.getLevel(); if (YConstants.EXT_LEVEL_JOURNAL_JOURNAL.equals(level)) { final String firstJournalName = values[0]; ancestor.addName(new YName(null, firstJournalName, Y_TYPE_HIGHLIGHTED)); } } } }
for (YAncestor actAnc : actYStruct.getAncestors()) { String level = actAnc.getLevel(); actAncMap.put(level, actAnc); for (YAncestor expAnc : expYStruct.getAncestors()) { String level = expAnc.getLevel(); if (actAncMap.containsKey(level)) { for (YAncestor yanc : expYStruct.getAncestors()) { String level = yanc.getLevel(); result.append(level, ResultStatus.FAILED, 1); for (YAncestor yanc : actStructMap.get(hierarchy).getAncestors()) { String level = yanc.getLevel(); result.append(level, ResultStatus.REDUNDANT, 1);
public List<String> getBasicIds(YElement elem) { ArrayList<String> ret = new ArrayList<String>(); for (YAffiliation aff: elem.getAffiliations()) { if (aff.getIdentity()!=null && !aff.getIdentity().isEmpty()){ ret.add(aff.getIdentity()); } } for (YContributor cont : elem.getContributors()) { if (!cont.getIdentity().isEmpty()) { ret.add(cont.getIdentity()); } } for (YStructure struct : elem.getStructures()) { for (YAncestor anc : struct.getAncestors()) { if (!anc.getIdentity().isEmpty()) { ret.add(anc.getIdentity()); } } } return ret; }
protected YStructure buildStructureFromParent(YElement parent, String hierarchy, String currentLevel) { YStructure structure = new YStructure(hierarchy); YCurrent current = new YCurrent(currentLevel); structure.setCurrent(current); if (parent != null) { YStructure parentStructure = parent.getStructure(hierarchy); structure.getAncestors().addAll(parentStructure.getAncestors()); YAncestor ancestor = new YAncestor(parentStructure.getCurrent().getLevel(), parent.getId()); ancestor.getNames().addAll(parent.getNames()); ancestor.getIds().addAll(parent.getIds()); structure.addAncestor(ancestor); } return structure; }
private void tryToFixVolumes(DocumentRepository repository, Document document, YElement element) { List<YAncestor> ancestors = element.getStructure(HierarchyWithLevelIds.EXT_HIERARCHY_JOURNAL).getAncestors(); YAncestor firstVolume = null; YAncestor secVolume = null;
@Override public YElement process(Book book, YElement parent, CrossrefIdGenerator generator) { BookSeriesMetadata bookSeriesMetadata = book.getBookSeriesMetadata(); String id = generator.generateBookVolumeId(parent.getId(), bookSeriesMetadata.getVolume()); YElement element = new YElement(); element.setId(id); element.addName(new YName(bookSeriesMetadata.getVolume())); YStructure structure = new YStructure(HierarchyWithLevelIds.EXT_HIERARCHY_BOOK); YCurrent current = new YCurrent(HierarchyWithLevelIds.EXT_LEVEL_BOOK_VOLUME); structure.setCurrent(current); structure.getAncestors().addAll(parent.getStructure(HierarchyWithLevelIds.EXT_HIERARCHY_BOOK).getAncestors()); element.addStructure(structure); return element; }
private Map<String, AncestorData> extractHierarchy(YElement yElement) { Map<String, AncestorData> result = new HashMap<String, AncestorData>(); for (final String hierarhyId : YModelUtils.ALLOWED_HIERARCHY_ID) { YStructure yStructure = yElement.getStructure(hierarhyId); if (yStructure != null) { for (YAncestor ancestor : yStructure.getAncestors()) { if (ResourceDataConstants.MAP_ANCESTOR_TYPE_TO_LEVEL.containsValue(ancestor.getLevel())) { final YName ancestorName = ancestor.getOneName(); if (ancestorName != null) { result.put(ResourceDataConstants.MAP_ANCESTOR_TYPE_TO_LEVEL.inverse().get(ancestor.getLevel()), new AncestorData().setId(ancestor.getIdentity()).setName(ancestorName.getText())); } } } YCurrent current = yStructure.getCurrent(); if(current!=null && StringUtils.isNotBlank(current.getPosition())){ result.put(ResourceDataConstants.ANCESTOR_LEVEL_NAME_PAGES, new AncestorData().setName(current.getPosition())); } } } return result; }
List<YAncestor> ancestors = element.getStructure(HierarchyWithLevelIds.EXT_HIERARCHY_JOURNAL).getAncestors();
private List<StructureData> prepareStructure(YElement yElement, String hierarchy, String[] levels, String... topLevelIds) { List<String> topLevels = Arrays.asList(topLevelIds); String topId = null; String topLevelId = null; List<StructureData> ancestors = new ArrayList<StructureData>(); final YStructure structure = yElement.getStructure(hierarchy); if (structure != null) { ListMultimap<String, YAncestor> mappedAncestors = getMappedAncestors(structure.getAncestors()); for (String level : levels) { final YAncestor ancestor = getAncestor(mappedAncestors, level); if (ancestor != null && ArrayUtils.contains(StructureData.LEVELS_ALLOWED, ancestor.getLevel())) { if (topLevels.contains(ancestor.getLevel())) { topId = ancestor.getIdentity(); topLevelId = ancestor.getLevel(); ancestors.add(new StructureData(ancestor.getIdentity(), YModelUtils.getDefaultName(ancestor), ancestor.getLevel(), topId, topLevelId)); } else { ancestors.add(new StructureData(ancestor.getIdentity(), IndexUtils.encodeNameValue(YModelUtils.getDefaultName(ancestor)), ancestor.getLevel(), topId, topLevelId)); } } } if (StringUtils.isNotBlank(structure.getCurrent().getPosition()) && ArrayUtils.contains(StructureData.ALLOWED_LEVELS_OF_CURRENT_POSITION, structure.getCurrent().getLevel())) { ancestors.add(new StructureData(null, structure.getCurrent().getPosition())); } } return ancestors; }
/** * Creates an element in the hierarchy. * * @param level hierarchy for the element * @param level level for the element in the hierarchy * @param name name to use as the canonical name of the element * @param parent parent for the element in the hierarchy * @param id eudml id * @return the created element */ public YElement element(String hierarchy, String level, YName name, YElement parent, String id) { YStructure ps = parent==null ? null : parent.getStructure(hierarchy); YStructure struct = new YStructure(hierarchy).setCurrent(new YCurrent(level)); List<String> issns = parent==null ? null : parent.getIds(IdSchemaIds.EXT_SCHEME_ISSN); String issn = (issns==null || issns.isEmpty()) ? null : issns.get(0); if (ps != null) { YAncestor ancestor = new YAncestor(ps.getCurrent().getLevel(), parent.getId()).addName(parent.getDefaultName()); if (StringUtils.isNotEmpty(issn)) { ancestor.addId(new YId(IdSchemaIds.EXT_SCHEME_ISSN, issn)); } struct.setAncestors(ps.getAncestors()).addAncestor(ancestor); } return new YElement(id).addName(name).addStructure(struct); }
YStructure tmpStruct = new YStructure(HierarchyWithLevelIds.EXT_HIERARCHY_JOURNAL); tmpStruct.setCurrent(new YCurrent(HierarchyWithLevelIds.EXT_LEVEL_JOURNAL_YEAR)); for (YAncestor a : struct.getAncestors()) { tmpStruct.addAncestor(a); YStructure tmpStruct = new YStructure(HierarchyWithLevelIds.EXT_HIERARCHY_JOURNAL); tmpStruct.setCurrent(new YCurrent(HierarchyWithLevelIds.EXT_LEVEL_JOURNAL_VOLUME)); for (YAncestor a : struct.getAncestors()) { tmpStruct.addAncestor(a); YStructure tmpStruct = new YStructure(HierarchyWithLevelIds.EXT_HIERARCHY_JOURNAL); tmpStruct.setCurrent(new YCurrent(HierarchyWithLevelIds.EXT_LEVEL_JOURNAL_ISSUE)); for (YAncestor a : struct.getAncestors()) { tmpStruct.addAncestor(a);
ancestor.addId(yISSN); struct.setAncestors(ps.getAncestors()).addAncestor(ancestor);
/** * Creates an element in the hierarchy specified by the <code>hierarchy</code> property. * * @param level level for the element in the hierarchy * @param name name to use as the canonical name of the element * @param parent parent for the element in the hierarchy * @return the created element */ public YElement element(String level, YName name, YElement parent) { YStructure ps = parent.getStructure(getHierarchy()); YStructure struct = new YStructure(getHierarchy()).setCurrent(new YCurrent(level)); if (ps != null) struct .setAncestors(ps.getAncestors()) .addAncestor( new YAncestor(ps.getCurrent().getLevel(), parent.getId()) .addName(parent.getDefaultName())); return new YElement( generateId(EXT_PREFIX_ELEMENT, parent, name)) .addName(name) .addStructure(struct); }