/*
 *                                                                            
 *  Copyright (c) 2011 - 2017 - Loetz GmbH & Co KG, 69115 Heidelberg, Germany 
 *                                                                            
 *  All rights reserved. This program and the accompanying materials           
 *  are made available under the terms of the Eclipse Public License 2.0        
 *  which accompanies this distribution, and is available at                  
 *  https://www.eclipse.org/legal/epl-2.0/                                 
 *                                 
 *  SPDX-License-Identifier: EPL-2.0                                 
 *                                                                            
 *  Initial contribution:                                                      
 *     Loetz GmbH & Co. KG                              
 * 
 */
package org.eclipse.osbp.ui.api.perspective;

public interface IPerspectiveProvider {

	public static final class PerspectiveViewType {
		private PerspectiveViewType() {
		}
		public static final String TABLE = "table";
		public static final String CHART = "chart";
		public static final String DIALOG = "dialog";
		public static final String REPORT = "report";
		public static final String TOPOLOGY = "topology";
		public static final String BPMN = "bpmn";
		public static final String ORGANIZATION = "organization";
		public static final String WELCOME = "welcome";
		public static final String SEARCH = "search";
		public static final String DATAINTERCHANGE = "data";
		public static final String SIGNAL = "signal";
		public static final String FUNCTIONLIBRARY = "functionlibrary";
	}
	
	public static final class FilterConstants {
		private FilterConstants() {
		}
		public static final String FILTER_DTO_CLASS = "filterDtoClass";//$NON-NLS-1$
		public static final String FILTER_DEPTH = "filterDepth";//$NON-NLS-1$
		public static final String FILTER_COLUMNS = "filterCols";//$NON-NLS-1$
	}
	
	public static final class KanbanConstants {
		private KanbanConstants() {
		}
		public static final String DTO = "dto";//$NON-NLS-1$
		public static final String CARD = "card";//$NON-NLS-1$
		public static final String DIALOG = "dialog";//$NON-NLS-1$
	}
	
	public static final class BrowserConstants {
		private BrowserConstants() {
		}
		public static final String URL = "url";//$NON-NLS-1$
	}
	
	public static final class E4Constants {
		private E4Constants() {
		}
		public static final String TRIMBAR = "TRIMBAR";//$NON-NLS-1$
		public static final String TOOLBARCONTROLS = "TOOLBARCONTROLS";//$NON-NLS-1$
		public static final String TOOLBARCONTROLITEM_PREFIX = "TOOLBARCONTROLITEM.";//$NON-NLS-1$
		public static final String TOOLBARITEM_PREFIX = "TOOLBARITEM.";//$NON-NLS-1$
		public static final String PERSPECTIVESTACK = "PERSPECTIVESTACK";//$NON-NLS-1$
		public static final String PERSPECTIVE_PREFIX = "PERSPECTIVE.";//$NON-NLS-1$
		public static final String BUNDLE_PROTOCOL_SCHEME = "bundleclass";//$NON-NLS-1$

		/**
		 * The NS URI of the model element to be shown in the part. This
		 * information must be put into {@link MPart#getPersistedState()}.<br>
		 * For instance: For {@link PerspectiveDialog} use
		 * {@link DialogDSLPackage#eNS_URI}
		 */
		public static final String OSBP_NS_URI = "osbp-NS-Uri";
		
		/**
		 * The flavor of the type. For instance table vs. grid.
		 */
		public static final String OSBP_FLAVOR = "osbp-NS-Uri-flavor";

		/**
		 * The fully qualified name <code>{package.name}.{object.name}</code> of
		 * the model element to be shown in the part. This information must be
		 * put into {@link MPart#getPersistedState()}.<br>
		 * For instance: For {@link PerspectiveDialog} use the FQN for
		 * {@link Dialog}.
		 * 
		 */
		public static final String OSBP_FQN = "osbp-model-fqn";
		/**
		 * Removes the perspective from stack if it is closed.
		 */
		public static final String TAG_REMOVE_ON_CLOSE = "remove_on_close";

		/**
		 * The perspective is not visible in the open perspective dialog.
		 */
		public static final String TAG_NOT_IN_OPEN_PERSPECTIVE_DIALOG = "not_in_open_perspective_dialog";

	}
	
	public static final class EventDispatcherConstants {
		private EventDispatcherConstants(){
		}
		/**
		 * Name of the key corresponding to the list of accepted senders. 
		 */
		public static final String ACCEPTED_SENDERS = "accepted_senders";
		/**
		 * key for transient data of partStacks to synchronize with other partStack
		 */
		public static final String SYNCHRONIZE_WITH = "synchronize_with"; 
	}

	void openPerspective(String perspectiveId);
	
	/**
	 * Open a not-model-based perspective.
	 *
	 * @param elementId the element id
	 * @param labelName the label name
	 * @param clazz the clazz
	 */
	void openPerspective(String elementId, String labelName, Class<?> clazz);
}
