Added LogInOutDecorator for EMFStore
diff --git a/ECP2/org.eclipse.emf.ecp.emfstore.ui/icons/bullet_delete.png b/ECP2/org.eclipse.emf.ecp.emfstore.ui/icons/bullet_delete.png
new file mode 100644
index 0000000..2ea8d97
--- /dev/null
+++ b/ECP2/org.eclipse.emf.ecp.emfstore.ui/icons/bullet_delete.png
Binary files differ
diff --git a/ECP2/org.eclipse.emf.ecp.emfstore.ui/icons/bullet_green.png b/ECP2/org.eclipse.emf.ecp.emfstore.ui/icons/bullet_green.png
new file mode 100644
index 0000000..76b9b2b
--- /dev/null
+++ b/ECP2/org.eclipse.emf.ecp.emfstore.ui/icons/bullet_green.png
Binary files differ
diff --git a/ECP2/org.eclipse.emf.ecp.emfstore.ui/plugin.xml b/ECP2/org.eclipse.emf.ecp.emfstore.ui/plugin.xml
index 8468d9e..b32294e 100644
--- a/ECP2/org.eclipse.emf.ecp.emfstore.ui/plugin.xml
+++ b/ECP2/org.eclipse.emf.ecp.emfstore.ui/plugin.xml
@@ -238,6 +238,19 @@
             If the porject has local changes.

          </description>

       </decorator>

+      <decorator

+           adaptable="true"

+           class="org.eclipse.emf.ecp.emfstore.internal.ui.decorator.ESBrowserLabelDecorator"

+           id="org.eclipse.emf.ecp.emfstore.ui.decorators.LoginDecorator"

+           label="Login Decorator"

+           lightweight="true"

+           state="true">

+        <enablement>

+           <objectClass

+                 name="org.eclipse.emf.ecp.core.ECPRepository">

+           </objectClass>

+        </enablement>

+     </decorator>

    </extension>

    <extension

          point="org.eclipse.core.expressions.propertyTesters">

@@ -249,5 +262,16 @@
             type="org.eclipse.emf.ecp.core.ECPRepository">

       </propertyTester>

    </extension>

-

+	<extension

+         point="org.eclipse.emf.emfstore.client.loginObserver">

+      <observer

+            loginObserver="org.eclipse.emf.ecp.emfstore.internal.ui.decorator.ESBrowserLabelDecorator">

+      </observer>

+   </extension>

+   <extension

+         point="org.eclipse.emf.emfstore.client.logoutObserver">

+      <observer

+            logoutObserver="org.eclipse.emf.ecp.emfstore.internal.ui.decorator.ESBrowserLabelDecorator">

+      </observer>

+   </extension>

 </plugin>

diff --git a/ECP2/org.eclipse.emf.ecp.emfstore.ui/src/org/eclipse/emf/ecp/emfstore/internal/ui/decorator/EMFStoreDirtyDecorator.java b/ECP2/org.eclipse.emf.ecp.emfstore.ui/src/org/eclipse/emf/ecp/emfstore/internal/ui/decorator/EMFStoreDirtyDecorator.java
index f18f471..5847bd1 100644
--- a/ECP2/org.eclipse.emf.ecp.emfstore.ui/src/org/eclipse/emf/ecp/emfstore/internal/ui/decorator/EMFStoreDirtyDecorator.java
+++ b/ECP2/org.eclipse.emf.ecp.emfstore.ui/src/org/eclipse/emf/ecp/emfstore/internal/ui/decorator/EMFStoreDirtyDecorator.java
@@ -19,8 +19,6 @@
 public class EMFStoreDirtyDecorator implements ILightweightLabelDecorator

 {

 

-  private String providerLabel = "org.eclipse.emf.ecp.emfstore.provider";

-

   private String dirtyPath = "icons/dirty.png";

 

   /**

@@ -44,7 +42,7 @@
     {

       ECPProject project = (ECPProject)element;

       ECPProvider provider = project.getProvider();

-      if (provider != null && providerLabel.equalsIgnoreCase(provider.getName())

+      if (provider != null && EMFStoreProvider.NAME.equalsIgnoreCase(provider.getName())

           && EMFStoreProvider.getProjectSpace((InternalProject)project).isDirty())

       {

         decoration.addOverlay(Activator.getImageDescriptor(dirtyPath), IDecoration.BOTTOM_LEFT);

diff --git a/ECP2/org.eclipse.emf.ecp.emfstore.ui/src/org/eclipse/emf/ecp/emfstore/internal/ui/decorator/ESBrowserLabelDecorator.java b/ECP2/org.eclipse.emf.ecp.emfstore.ui/src/org/eclipse/emf/ecp/emfstore/internal/ui/decorator/ESBrowserLabelDecorator.java
new file mode 100644
index 0000000..55d93a9
--- /dev/null
+++ b/ECP2/org.eclipse.emf.ecp.emfstore.ui/src/org/eclipse/emf/ecp/emfstore/internal/ui/decorator/ESBrowserLabelDecorator.java
@@ -0,0 +1,132 @@
+/*******************************************************************************
+ * Copyright (c) 2008-2011 Chair for Applied Software Engineering,
+ * Technische Universitaet Muenchen.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ ******************************************************************************/
+package org.eclipse.emf.ecp.emfstore.internal.ui.decorator;
+
+import org.eclipse.emf.ecp.core.ECPProvider;
+import org.eclipse.emf.ecp.core.ECPRepository;
+import org.eclipse.emf.ecp.emfstore.core.internal.EMFStoreProvider;
+import org.eclipse.emf.ecp.emfstore.internal.ui.Activator;
+import org.eclipse.emf.ecp.spi.core.InternalRepository;
+import org.eclipse.emf.emfstore.client.model.ServerInfo;
+import org.eclipse.emf.emfstore.client.model.Usersession;
+import org.eclipse.emf.emfstore.client.model.observers.LoginObserver;
+import org.eclipse.emf.emfstore.client.model.observers.LogoutObserver;
+
+import org.eclipse.jface.viewers.IDecoration;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.ILightweightLabelDecorator;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * @see ILightweightLabelDecorator
+ */
+public class ESBrowserLabelDecorator extends LabelProvider implements ILightweightLabelDecorator, LoginObserver,
+    LogoutObserver
+{
+
+  /**
+   * {@inheritDoc} Decorates the label of a {@link ServerInfo} object according to its login state.
+   */
+  public void decorate(Object element, IDecoration decoration)
+  {
+    if (element instanceof ECPRepository)
+    {
+      InternalRepository repository = (InternalRepository)element;
+      ECPProvider provider = repository.getProvider();
+
+      if (provider != null && EMFStoreProvider.NAME.equalsIgnoreCase(provider.getName()))
+      {
+        ServerInfo server = EMFStoreProvider.getServerInfo(repository);
+        if (server.getLastUsersession() != null && server.getLastUsersession().isLoggedIn())
+        {
+          decoration.addOverlay(Activator.getImageDescriptor("icons/bullet_green.png"), IDecoration.BOTTOM_RIGHT);
+        }
+        else
+        {
+          decoration.addOverlay(Activator.getImageDescriptor("icons/bullet_delete.png"), IDecoration.BOTTOM_RIGHT);
+        }
+      }
+    }
+  }
+
+  /**
+   * {@inheritDoc}
+   * 
+   * @see org.eclipse.jface.viewers.BaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
+   */
+  @Override
+  public void addListener(ILabelProviderListener listener)
+  {
+  }
+
+  /**
+   * {@inheritDoc}
+   * 
+   * @see org.eclipse.jface.viewers.BaseLabelProvider#dispose()
+   */
+  @Override
+  public void dispose()
+  {
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  public boolean isLabelProperty(Object element, String property)
+  {
+    return false;
+  }
+
+  /**
+   * {@inheritDoc}
+   * 
+   * @see org.eclipse.jface.viewers.BaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
+   */
+  @Override
+  public void removeListener(ILabelProviderListener listener)
+  {
+  }
+
+  /**
+   * {@inheritDoc}
+   * 
+   * @see org.eclipse.emf.emfstore.client.model.observers.LoginObserver#loginCompleted(org.eclipse.emf.emfstore.client.model.Usersession)
+   */
+  public void loginCompleted(Usersession session)
+  {
+    update();
+  }
+
+  /**
+   * {@inheritDoc}
+   * 
+   * @see org.eclipse.emf.emfstore.client.model.observers.LogoutObserver#logoutCompleted(org.eclipse.emf.emfstore.client.model.Usersession)
+   */
+  public void logoutCompleted(Usersession session)
+  {
+    update();
+  }
+
+  private void update()
+  {
+    Display.getDefault().asyncExec(new Runnable()
+    {
+      public void run()
+      {
+        PlatformUI.getWorkbench().getDecoratorManager()
+            .update("org.eclipse.emf.ecp.emfstore.ui.decorators.LoginDecorator");
+      }
+    });
+  }
+}