Index: config/src/main/resources/cms-static.xml IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- config/src/main/resources/cms-static.xml (revision 37452) +++ config/src/main/resources/cms-static.xml (revision ) @@ -415,6 +415,9 @@ service.browse.tabscontainer + + header.bar.right + frontend:pluginconfig @@ -521,6 +524,18 @@ service.edit + + + + + + frontend:plugin + + + cms-header-bar + + + org.hippoecm.frontend.plugin.loader.PluginClusterLoader Index: config/src/main/resources/cms-header-bar.xml IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- config/src/main/resources/cms-header-bar.xml (revision ) +++ config/src/main/resources/cms-header-bar.xml (revision ) @@ -0,0 +1,6 @@ + + + + frontend:plugincluster + + Index: config/src/main/resources/hippoecm-extension.xml IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- config/src/main/resources/hippoecm-extension.xml (revision 37452) +++ config/src/main/resources/hippoecm-extension.xml (revision ) @@ -248,6 +248,20 @@ 900.53 + + + hippo:initializeitem + + + cms-header-bar.xml + + + /hippo:configuration/hippo:frontend/cms + + + 900.54 + + Index: perspectives/src/main/java/org/hippoecm/frontend/plugins/cms/root/RootPlugin.html IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- perspectives/src/main/java/org/hippoecm/frontend/plugins/cms/root/RootPlugin.html (revision 37452) +++ perspectives/src/main/java/org/hippoecm/frontend/plugins/cms/root/RootPlugin.html (revision ) @@ -25,9 +25,12 @@
Hippo CMS 7
tabs container here please
-
+
[ user ] -
    +
      +
    • +
    +
    • Index: skin/src/main/resources/skin/screen.css IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- skin/src/main/resources/skin/screen.css (revision 37452) +++ skin/src/main/resources/skin/screen.css (revision ) @@ -224,6 +224,19 @@ font-weight: bold; } +.hippo-header-items-right { + position: absolute; + top: 5px; + right: 100px; +} +.hippo-header-items-right li { + float: left; + margin-right: 10px; +} +.hippo-header-items-right span span a { + color: #ffffff; +} + /* TabsPlugin perspective switcher (left buttons) */ /* ================================================ */ .tabbed-panel-layout-left { Index: perspectives/src/main/java/org/hippoecm/frontend/plugins/cms/root/RootPlugin.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- perspectives/src/main/java/org/hippoecm/frontend/plugins/cms/root/RootPlugin.java (revision 37452) +++ perspectives/src/main/java/org/hippoecm/frontend/plugins/cms/root/RootPlugin.java (revision ) @@ -16,8 +16,17 @@ package org.hippoecm.frontend.plugins.cms.root; import java.util.ArrayList; +import java.util.LinkedList; import java.util.List; +import org.apache.wicket.behavior.AttributeAppender; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.repeater.Item; +import org.apache.wicket.markup.repeater.data.IDataProvider; +import org.apache.wicket.markup.repeater.data.ListDataProvider; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; +import org.apache.wicket.model.PropertyModel; import org.hippoecm.frontend.PluginRequestTarget; import org.hippoecm.frontend.extjs.ExtHippoThemeBehavior; import org.hippoecm.frontend.extjs.ExtWidgetRegistry; @@ -25,6 +34,7 @@ import org.hippoecm.frontend.js.HippoFutureResourceBehavior; import org.hippoecm.frontend.plugin.IPluginContext; import org.hippoecm.frontend.plugin.config.IPluginConfig; +import org.hippoecm.frontend.plugins.cms.admin.users.User; import org.hippoecm.frontend.plugins.cms.root.BrowserSpecificStylesheetsBehavior.Browser; import org.hippoecm.frontend.plugins.cms.root.BrowserSpecificStylesheetsBehavior.StylesheetConfiguration; import org.hippoecm.frontend.plugins.cms.root.BrowserSpecificStylesheetsBehavior.UserAgent; @@ -38,7 +48,12 @@ import org.hippoecm.frontend.plugins.yui.layout.WireframeSettings; import org.hippoecm.frontend.plugins.yui.webapp.WebAppBehavior; import org.hippoecm.frontend.plugins.yui.webapp.WebAppSettings; +import org.hippoecm.frontend.service.IRenderService; import org.hippoecm.frontend.service.IconSize; +import org.hippoecm.frontend.service.ServiceTracker; +import org.hippoecm.frontend.service.render.ListViewService; +import org.hippoecm.frontend.session.UserSession; +import org.hippoecm.frontend.widgets.AbstractView; import org.hippoecm.frontend.widgets.Pinger; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -53,6 +68,46 @@ private boolean rendered = false; private final ExtWidgetRegistry extWidgetRegistry; + @SuppressWarnings("unused") + private String username; + + private AbstractView view; + private List services; + private ServiceTracker tracker; + + private static class EvenOddModel extends Model { + private static final long serialVersionUID = 1L; + + public EvenOddModel(int index) { + if (index % 2 == 0) { + setObject("even"); + } else { + setObject("odd"); + } + } + } + + private static class RenderServiceModel extends Model { + private static final long serialVersionUID = 1L; + + RenderServiceModel(IRenderService service) { + super(service); + } + + @Override + public int hashCode() { + return getObject().hashCode() * 19; + } + + @Override + public boolean equals(Object that) { + if (that != null && that instanceof RenderServiceModel) { + return ((RenderServiceModel) that).getObject() == getObject(); + } + return false; + } + } + public RootPlugin(IPluginContext context, IPluginConfig config) { super(context, config); @@ -63,8 +118,74 @@ } else { add(new Pinger("pinger")); } + + String userID = getSession().getJcrSession().getUserID(); + username = new User(userID).getDisplayName(); + + add(new Label("username", new PropertyModel(this, "username"))); + add(new LogoutLink("logout")); + services = new LinkedList(); + + final IDataProvider provider = new ListDataProvider(services) { + private static final long serialVersionUID = 1L; + + @Override + public IModel model(IRenderService object) { + return new RenderServiceModel(object); + } + }; + + view = new AbstractView("view", provider) { + private static final long serialVersionUID = 1L; + + @Override + protected void populateItem(Item item) { + IRenderService renderer = item.getModelObject(); + renderer.bind(RootPlugin.this, "item"); + item.add(renderer.getComponent()); + RootPlugin.this.onAddRenderService(item, renderer); + item.add(new AttributeAppender("class", new EvenOddModel(item.getIndex()), " ")); + } + + @Override + protected void destroyItem(Item item) { + IRenderService renderer = item.getModelObject(); + item.remove(renderer.getComponent()); + RootPlugin.this.onRemoveRenderService(item, renderer); + renderer.unbind(); + } + }; + + String itemId = getItemId(); + if (itemId != null) { + tracker = new ServiceTracker(IRenderService.class) { + private static final long serialVersionUID = 1L; + + @Override + public void onServiceAdded(IRenderService service, String name) { + log.debug("adding " + service + " to ListViewService at " + name); + services.add(service); + } + + @Override + public void onServiceChanged(IRenderService service, String name) { + } + + @Override + public void onRemoveService(IRenderService service, String name) { + log.debug("removing " + service + " from ListViewService at " + name); + services.remove(service); + } + }; + context.registerTracker(tracker, itemId); + } else { + log.warn("No item id configured"); + } + + add(view); + PageLayoutSettings plSettings = new PageLayoutSettings(); plSettings.setHeaderHeight(25); // TODO: update settings from config @@ -116,6 +237,16 @@ rendered = true; } super.render(target); + } + + protected String getItemId() { + return getPluginConfig().getString(ListViewService.ITEM); + } + + protected void onAddRenderService(Item item, IRenderService renderer) { + } + + protected void onRemoveRenderService(Item item, IRenderService renderer) { } }