public void service(HttpServletRequest request, HttpServletResponse response)
     throws FormatterException {
   renderFragment("outputStart");
   renderFragment("workspacesSelect");
   if (getNavigationManager().isAdminBarVisible())
     try {
       Workspace currentWorkspace = getNavigationManager().getCurrentWorkspace();
       BackOfficePermission createPerm =
           BackOfficePermission.newInstance(null, BackOfficePermission.ACTION_CREATE_WORKSPACE);
       WorkspacePermission editPerm =
           WorkspacePermission.newInstance(currentWorkspace, WorkspacePermission.ACTION_EDIT);
       WorkspacePermission deletePerm =
           WorkspacePermission.newInstance(currentWorkspace, WorkspacePermission.ACTION_DELETE);
       boolean canAddWorkspace = getUserStatus().hasPermission(createPerm);
       if (canAddWorkspace) {
         renderFragment("createNewButton");
       }
       if (getUserStatus().hasPermission(editPerm)) {
         renderFragment("editButton");
       }
       if (UIServices.lookup().getWorkspacesManager().getAvailableWorkspacesIds().size() > 1
           && getUserStatus().hasPermission(deletePerm)) {
         renderFragment("deleteButton");
       }
       if (canAddWorkspace) {
         renderFragment("duplicateButton");
       }
     } catch (Exception e) {
       throw new FormatterException(e);
     }
   renderFragment("outputEnd");
 }
 protected List listChildren() {
   List children = new ArrayList();
   PanelInstancesNode parent = (PanelInstancesNode) getParent();
   final String language = LocaleManager.currentLang();
   try {
     String workspaceId = parent.getHandler().getWorkspaceId();
     WorkspaceImpl workspace =
         (WorkspaceImpl) UIServices.lookup().getWorkspacesManager().getWorkspace(workspaceId);
     PanelInstance[] instances = workspace.getPanelInstancesInGroup(providerId);
     if (instances != null) {
       TreeSet<PanelInstance> panelInstances =
           new TreeSet<PanelInstance>(
               new Comparator<PanelInstance>() {
                 public int compare(PanelInstance p1, PanelInstance p2) {
                   return p1.getTitle(language).compareToIgnoreCase(p2.getTitle(language));
                 }
               });
       TreeSet<String> groups = new TreeSet<String>();
       for (PanelInstance pi : instances) {
         String group = pi.getParameterValue(PanelInstance.PARAMETER_GROUP, language);
         if (group != null && !"".equals(group.trim())) {
           groups.add(group);
         } else {
           panelInstances.add(pi);
         }
       }
       for (String gr : groups) {
         children.add(getNewGroupNode(workspaceId, gr));
       }
       for (PanelInstance pi : panelInstances) {
         children.add(getNewInstanceNode(pi));
       }
     }
   } catch (Exception e) {
     log.error("Error: ", e);
   }
   return children;
 }
 public WorkspacesManager getWorkspacesManager() {
   return UIServices.lookup().getWorkspacesManager();
 }
 protected String getPanelActionLink(
     HttpServletRequest request, HttpServletResponse response, Panel panel, String action) {
   URLMarkupGenerator markupGenerator = UIServices.lookup().getUrlMarkupGenerator();
   return markupGenerator.getLinkToPanelAction(panel, action, true);
 }