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

com.liferay.portal.kernel.model.PortletCategory Maven / Gradle / Ivy

There is a newer version: 7.4.3.112-ga112
Show newest version
/**
 * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
 *
 * This library is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License as published by the Free
 * Software Foundation; either version 2.1 of the License, or (at your option)
 * any later version.
 *
 * This library is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
 * details.
 */

package com.liferay.portal.kernel.model;

import com.liferay.petra.string.StringPool;

import java.io.Serializable;

import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;

/**
 * @author Brian Wing Shun Chan
 * @author Dennis Ju
 */
public class PortletCategory implements Serializable {

	public PortletCategory() {
		this("root");
	}

	public PortletCategory(String name) {
		this(name, new HashSet());
	}

	public PortletCategory(String name, Set portletIds) {
		_portletCategories = new ConcurrentHashMap<>();

		_portletIds = ConcurrentHashMap.newKeySet();

		_portletIds.addAll(portletIds);

		if (name.contains(_DELIMITER)) {
			int index = name.lastIndexOf(_DELIMITER);

			_name = name.substring(index + _DELIMITER.length());

			String parentName = name.substring(0, index);

			PortletCategory parentPortletCategory = new PortletCategory(
				parentName);

			parentPortletCategory.addCategory(this);
		}
		else {
			_name = name;
			_parentPortletCategory = null;
			_path = name;
		}
	}

	public void addCategory(PortletCategory portletCategory) {
		portletCategory.setParentCategory(this);

		String path = _path.concat(
			_DELIMITER
		).concat(
			portletCategory.getName()
		);

		portletCategory.setPath(path);

		_portletCategories.put(portletCategory.getName(), portletCategory);
	}

	public Collection getCategories() {
		return Collections.unmodifiableCollection(_portletCategories.values());
	}

	public PortletCategory getCategory(String name) {
		return _portletCategories.get(name);
	}

	public String getName() {
		return _name;
	}

	public PortletCategory getParentCategory() {
		return _parentPortletCategory;
	}

	public String getPath() {
		return _path;
	}

	public Set getPortletIds() {
		return _portletIds;
	}

	public PortletCategory getRootCategory() {
		if (_parentPortletCategory == null) {
			return this;
		}

		return _parentPortletCategory.getRootCategory();
	}

	public boolean isHidden() {
		if (_name.equals(PortletCategoryConstants.NAME_HIDDEN)) {
			return true;
		}

		return false;
	}

	public void merge(PortletCategory newPortletCategory) {
		merge(this, newPortletCategory);
	}

	public void separate(Set portletIds) {
		for (PortletCategory portletCategory : _portletCategories.values()) {
			portletCategory.separate(portletIds);
		}

		Iterator itr = _portletIds.iterator();

		while (itr.hasNext()) {
			String portletId = itr.next();

			if (portletIds.contains(portletId)) {
				itr.remove();
			}
		}
	}

	public void separate(String portletId) {
		Set portletIds = new HashSet<>(1);

		portletIds.add(portletId);

		separate(portletIds);
	}

	public void setPortletIds(Set portletIds) {
		_portletIds.clear();

		_portletIds.addAll(portletIds);
	}

	protected void merge(
		PortletCategory portletCategory1, PortletCategory portletCategory2) {

		Collection portletCategories =
			portletCategory2.getCategories();

		for (PortletCategory curPortletCategory2 : portletCategories) {
			PortletCategory curPortletCategory1 = portletCategory1.getCategory(
				curPortletCategory2.getName());

			if (curPortletCategory1 != null) {
				merge(curPortletCategory1, curPortletCategory2);
			}
			else {
				portletCategory1.addCategory(curPortletCategory2);
			}
		}

		Set portletIds1 = portletCategory1.getPortletIds();
		Set portletIds2 = portletCategory2.getPortletIds();

		portletIds1.addAll(portletIds2);
	}

	protected void setParentCategory(PortletCategory portletCategory) {
		_parentPortletCategory = portletCategory;
	}

	protected void setPath(String path) {
		_path = path;
	}

	private static final String _DELIMITER = StringPool.DOUBLE_SLASH;

	private final String _name;
	private PortletCategory _parentPortletCategory;
	private String _path;
	private final Map _portletCategories;
	private final Set _portletIds;

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy