uidesigner/com.nokia.sdt.uimodel/src/com/nokia/sdt/component/IComponent.java
changeset 0 fb279309251b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uidesigner/com.nokia.sdt.uimodel/src/com/nokia/sdt/component/IComponent.java	Fri Apr 03 23:33:03 2009 +0100
@@ -0,0 +1,131 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+/**
+ * 
+ */
+package com.nokia.sdt.component;
+
+import com.nokia.cpp.internal.api.utils.core.MessageLocation;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.Version;
+
+import java.io.*;
+
+/** 
+ * The main interface for a component.
+ * Each aspect of component information and behavior
+ * is implemented by one or more adapters. Adapters
+ * are obtained from each component's provider. 
+ * <p>
+ * This approach allows the provider to specify how adapters
+ * are implemented for the components in provides.
+ * <p>
+ * The set of adapters can be extended by getting
+ * component provider from the component system
+ * and registering new adapter factories.
+ * <p>
+ * Here's an example of obtaining an adapter:
+ * <pre>
+ * IComponent myComponent = ...
+ * IPropertyDescriptorProvider pdProvider =
+ *     myComponent.getAdapter(IPropertyDescriptorProvider.class);
+ * </pre>
+ */
+public interface IComponent extends IAdaptable {
+	
+	/**
+	 * Returns the provider that implements this component type
+	 */
+	IComponentProvider getProvider();
+	
+	/**
+	 * Returns the bundle providing this component (may be null)
+	 */
+	Bundle getBundle();
+	
+    /** 
+     * Returns the component's unique id. The convention
+     * for component naming is specific to a provider, but
+     * each id must be unique to the provider.
+     */
+    String getId();
+	
+	/**
+	 * Returns the component's category, if any.
+	 * The result should be already localized, if possible.
+	 */
+	String getCategory();
+	
+	/**
+	 * Returns the component's version as an OSGI version object.
+	 * @return
+	 */
+	public Version getComponentVersion();
+	
+	/**
+	 * Returns a string used as the root part of a
+	 * component instance name. This root can have a prefix
+	 * and suffix added for uniqueness and source generation purposes.
+	 * This method should just return a base name that makes sense
+	 * for the component without regard to uniqueness or source
+	 * generation issues.
+	 */
+	String getInstanceNameRoot();
+    
+	/**
+	 * Returns the "friendly name" attribute of the component.
+	 * @return friendly name String
+	 */
+	String getFriendlyName();
+	
+	/**
+	 * Returns the base component's unique id, or null if no base component
+	 */
+	String getBaseComponentId();
+	
+	/**
+     * Returns the immediate base component for this component.
+     */
+    IComponent getComponentBase();
+    
+    /**
+     * An abstract component can act as a base component but cannot be instantiated
+     */
+    boolean isAbstract();
+    
+    /**
+     * Returns the component set this component belongs to.
+     * Each component is shallow-copied into a component set.
+     * @returns IComponentSet or null if this component comes straight
+     * from a component provider.   
+     */
+    IComponentSet getComponentSet();
+    
+    /**
+     * Create a message location based on this component,
+     * e.g. for reporting errors that come from a component definition.
+     */
+    MessageLocation createMessageLocation();
+
+    /**
+     * Get the base directory of the component.
+     * May return null if component is not located on disk.
+     */
+    File getBaseDirectory();
+}