All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.molgenis.catalog.CatalogModelBuilder Maven / Gradle / Ivy

The newest version!
package org.molgenis.catalog;

import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import org.molgenis.study.StudyDefinition;

public class CatalogModelBuilder
{
	private CatalogModelBuilder()
	{
	}

	public static CatalogModel create(Catalog catalog)
	{
		return create(catalog, null);
	}

	public static CatalogModel create(Catalog catalog, StudyDefinition studyDefinition)
	{
		return create(catalog, null, false);
	}

	public static CatalogModel create(Catalog catalog, StudyDefinition studyDefinition, boolean selectedOnly)
	{
		CatalogModel catalogModel = new CatalogModel();
		catalogModel.setTitle(catalog.getName());
		catalogModel.setDescription(catalog.getDescription());
		catalogModel.setVersion(catalog.getVersion());
		catalogModel.setAuthors(catalog.getAuthors());

		createCatalogModelRec(catalogModel, catalog, studyDefinition, selectedOnly);
		if (hasDescendantItems(catalogModel))
		{
			sortByName(catalogModel);
		}

		return catalogModel;
	}

	private static void createCatalogModelRec(CatalogModelFolder catalogModelFolder, CatalogFolder catalogFolder,
			StudyDefinition studyDefinition, boolean selectedOnly)
	{
		List items = catalogFolder.getItems();
		if (items != null)
		{
			for (CatalogItem item : items)
			{
				boolean selected = studyDefinition != null && studyDefinition.containsItem(item);
				if (!selectedOnly || (selectedOnly && selected))
				{
					catalogModelFolder.addItem(new CatalogModelItem(item.getId(), item.getName(), selected));
				}
			}
		}

		List children = catalogFolder.getChildren();
		if (children != null)
		{
			for (CatalogFolder childFolder : children)
			{
				CatalogModelFolder childCatalogModelFolder = new CatalogModelFolder();
				createCatalogModelRec(childCatalogModelFolder, childFolder, studyDefinition, selectedOnly);
				if (!selectedOnly || (selectedOnly && hasDescendantItems(childCatalogModelFolder)))
				{
					catalogModelFolder.addChild(childCatalogModelFolder);
				}
			}
		}

		catalogModelFolder.setId(catalogFolder.getId());
		catalogModelFolder.setName(catalogFolder.getName());
		catalogModelFolder.setSelected(false);
	}

	private static boolean hasDescendantItems(CatalogModelFolder catalogModelFolder)
	{
		List items = catalogModelFolder.getItems();
		if (items != null && !items.isEmpty()) return true;

		List children = catalogModelFolder.getChildren();
		if (children != null)
		{
			for (CatalogModelFolder child : children)
				if (hasDescendantItems(child)) return true;
		}
		return false;
	}

	private static void sortByName(CatalogModelFolder catalogModelFolder)
	{
		List children = catalogModelFolder.getChildren();
		if (children != null && children.size() > 1)
		{
			Collections.sort(children, new Comparator()
			{
				@Override
				public int compare(CatalogModelFolder node1, CatalogModelFolder node2)
				{
					return node1.getName().compareTo(node2.getName());
				}
			});
			for (CatalogModelFolder child : children)
			{
				sortByName(child);
			}
		}

		List items = catalogModelFolder.getItems();
		if (items != null && items.size() > 1)
		{
			Collections.sort(items, new Comparator()
			{
				@Override
				public int compare(CatalogModelItem item1, CatalogModelItem item2)
				{
					return item1.getName().compareTo(item2.getName());
				}
			});
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy