/*
 *                                                                            
 *  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 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 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";

	}

	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);
}
