package eu.dnetlib.server;

import java.util.ArrayList;
import java.util.Date;
import java.util.concurrent.ConcurrentHashMap;

import eu.dnetlib.client.shared.Data;
import eu.dnetlib.efg1914.authoring.components.Configuration;
import eu.dnetlib.efg1914.authoring.components.Frame;
import eu.dnetlib.efg1914.authoring.components.Item;
import eu.dnetlib.efg1914.authoring.components.Theme;
import eu.dnetlib.efg1914.authoring.components.Topic;
import eu.dnetlib.efg1914.authoring.users.User;

public interface NotificationRegistry {

	// ITEMS
	//
	public void addItem(Item it);

	public void addDeletedItem(Item id);

	public void addUpdatedItem(Item it);

	// FRAMES
	//
	public void addFrame(Frame it);

	public void addUpdatedFrame(Frame it);

	public void addDeletedFrame(Frame id);

	// TOPICS
	//
	public void addTopic(Topic it);

	public void addDeletedTopic(Topic id);

	public void addUpdatedTopic(Topic it);

	public void addTheme(Theme it);

	public void addDeletedTheme(Theme id);

	public void addUpdatedTheme(Theme it);

	public void destroy();

	public void markComponent(String componentId, String userId);

	public void unmarkComponent(String componentId, String userId);

	public void clearUpCache();

	public Data receiveUpdates(String user);

	public void registerUser(String user);

	public void removeUser(String user, ArrayList<String> userLockedComponents);

	public ConcurrentHashMap<String, Date> getRegisteredUsers();

	// Users
	//
	public void addUser(User user);

	public void addDeletedUser(String id);

	public void addUpdatedUser(User user);

	public void unmarkComponent(String componentId);

	public void clearActive();

	public void clearActive(String userId, ArrayList<String> userLockedComponents);

	public void updateConfiguration(Configuration configuration);

}