
org.molgenis.data.meta.MetaDataSearchServiceImpl Maven / Gradle / Ivy
package org.molgenis.data.meta;
import com.google.common.collect.Lists;
import org.apache.commons.lang3.StringUtils;
import org.molgenis.data.DataService;
import org.molgenis.data.Query;
import org.molgenis.data.meta.model.EntityType;
import org.molgenis.data.meta.model.EntityTypeMetadata;
import org.molgenis.data.meta.model.Package;
import org.molgenis.data.support.QueryImpl;
import org.molgenis.security.core.runas.RunAsSystem;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
import static org.molgenis.data.meta.model.EntityTypeMetadata.ENTITY_TYPE_META_DATA;
import static org.molgenis.data.meta.model.PackageMetadata.PACKAGE;
@Component
public class MetaDataSearchServiceImpl implements MetaDataSearchService
{
private final DataService dataService;
private final MetaDataService metaDataService;
@Autowired
public MetaDataSearchServiceImpl(DataService dataService, MetaDataService metaDataService)
{
this.dataService = dataService;
this.metaDataService = metaDataService;
}
@Override
@RunAsSystem
public List findRootPackages(String searchTerm)
{
List results = Lists.newArrayList();
if (StringUtils.isBlank(searchTerm))
{
for (Package p : metaDataService.getRootPackages())
{
results.add(new PackageSearchResultItem(p));
}
}
else
{
// Search in packages
Query packageQuery = new QueryImpl().search(searchTerm);
dataService.findAll(PACKAGE, packageQuery, Package.class).forEach(packageEntity ->
{
if ((packageEntity != null) && (packageEntity.getParent() == null))
{
String matchDesc = "Matched: package '" + packageEntity.getId() + "'";
results.add(new PackageSearchResultItem(packageEntity, matchDesc));
}
});
// Search in entities
Query entityTypeQuery = new QueryImpl().search(searchTerm);
dataService.findAll(ENTITY_TYPE_META_DATA, entityTypeQuery, EntityType.class).forEach(entityType ->
{
Package p = getRootPackage(entityType);
if (p != null)
{
String matchDesc = "Matched: entity '" + entityType.getString(EntityTypeMetadata.ID) + "'";
PackageSearchResultItem item = new PackageSearchResultItem(p.getRootPackage(), matchDesc);
if ((p != null) && !results.contains(item)) results.add(item);
}
});
// Search in attributes no longer needed since the entities contain the attribute documents.
// Change this if the searching for tags becomes needed and/or the results need to reflect which attribute
// got matched.
}
// Remove default package
results.removeIf(item -> item.getPackageFound().getId().equals("default"));
return results;
}
// Get the root package of an entity
private Package getRootPackage(EntityType entityType)
{
Package packageEntity = entityType.getEntity(EntityTypeMetadata.PACKAGE, Package.class);
if (packageEntity != null)
{
String packageName = packageEntity.getId();
if (packageName != null)
{
Package p = metaDataService.getPackage(packageName);
if (p != null)
{
return p.getRootPackage();
}
}
}
return null;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy