Package org.projectforge.plugins.teamcal.admin

Source Code of org.projectforge.plugins.teamcal.admin.TeamCalListPage$MyICSExportDialog

/////////////////////////////////////////////////////////////////////////////
//
// Project ProjectForge Community Edition
//         www.projectforge.org
//
// Copyright (C) 2001-2014 Kai Reinhard (k.reinhard@micromata.de)
//
// ProjectForge is dual-licensed.
//
// This community edition is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as published
// by the Free Software Foundation; version 3 of the License.
//
// This community edition is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
// Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, see http://www.gnu.org/licenses/.
//
/////////////////////////////////////////////////////////////////////////////

package org.projectforge.plugins.teamcal.admin;

import java.util.ArrayList;
import java.util.List;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.ResourceModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.projectforge.plugins.teamcal.dialog.TeamCalICSExportDialog;
import org.projectforge.web.calendar.AbstractICSExportDialog;
import org.projectforge.web.calendar.CalendarFeed;
import org.projectforge.web.wicket.AbstractListPage;
import org.projectforge.web.wicket.CellItemListener;
import org.projectforge.web.wicket.CellItemListenerPropertyColumn;
import org.projectforge.web.wicket.IListPageColumnsCreator;
import org.projectforge.web.wicket.ListPage;
import org.projectforge.web.wicket.ListSelectActionPanel;
import org.projectforge.web.wicket.components.ContentMenuEntryPanel;
import org.projectforge.web.wicket.flowlayout.AjaxIconLinkPanel;
import org.projectforge.web.wicket.flowlayout.IconType;

/**
* @author M. Lauterbach (m.lauterbach@micromata.de)
*
*/
@ListPage(editPage = TeamCalEditPage.class)
public class TeamCalListPage extends AbstractListPage<TeamCalListForm, TeamCalDao, TeamCalDO> implements IListPageColumnsCreator<TeamCalDO>
{
  private static final long serialVersionUID = 1749480610890950450L;

  @SpringBean(name = "teamCalDao")
  private TeamCalDao teamCalDao;

  private TeamCalICSExportDialog icsExportDialog;

  private final boolean isAdminUser;

  /**
   *
   */
  public TeamCalListPage(final PageParameters parameters)
  {
    super(parameters, "plugins.teamcal");
    isAdminUser = accessChecker.isLoggedInUserMemberOfAdminGroup();
  }

  /**
   * @see org.projectforge.web.wicket.IListPageColumnsCreator#createColumns(org.apache.wicket.markup.html.WebPage, boolean)
   */
  @SuppressWarnings("serial")
  @Override
  public List<IColumn<TeamCalDO, String>> createColumns(final WebPage returnToPage, final boolean sortable)
  {
    final List<IColumn<TeamCalDO, String>> columns = new ArrayList<IColumn<TeamCalDO, String>>();

    final CellItemListener<TeamCalDO> cellItemListener = new CellItemListener<TeamCalDO>() {
      public void populateItem(final Item<ICellPopulator<TeamCalDO>> item, final String componentId, final IModel<TeamCalDO> rowModel)
      {
        final TeamCalDO teamCal = rowModel.getObject();
        appendCssClasses(item, teamCal.getId(), teamCal.isDeleted());
      }
    };

    columns.add(new CellItemListenerPropertyColumn<TeamCalDO>(getString("plugins.teamcal.title"), getSortable("title", sortable), "title",
        cellItemListener) {
      /**
       * @see org.projectforge.web.wicket.CellItemListenerPropertyColumn#populateItem(org.apache.wicket.markup.repeater.Item,
       *      java.lang.String, org.apache.wicket.model.IModel)
       */
      @Override
      public void populateItem(final Item<ICellPopulator<TeamCalDO>> item, final String componentId, final IModel<TeamCalDO> rowModel)
      {
        final TeamCalDO teamCal = rowModel.getObject();
        item.add(new ListSelectActionPanel(componentId, rowModel, TeamCalEditPage.class, teamCal.getId(), returnToPage, teamCal.getTitle()));
        cellItemListener.populateItem(item, componentId, rowModel);
        addRowClick(item);
      }
    });

    columns.add(new CellItemListenerPropertyColumn<TeamCalDO>(getString("plugins.teamcal.description"),
        getSortable("description", sortable), "description", cellItemListener));
    columns.add(new CellItemListenerPropertyColumn<TeamCalDO>(getString("plugins.teamcal.owner"), getSortable("owner", sortable),
        "owner.username", cellItemListener));
    columns.add(new AbstractColumn<TeamCalDO, String>(new Model<String>(getString("plugins.teamcal.access"))) {
      /**
       * @see org.projectforge.web.wicket.CellItemListenerPropertyColumn#populateItem(org.apache.wicket.markup.repeater.Item,
       *      java.lang.String, org.apache.wicket.model.IModel)
       */
      @Override
      public void populateItem(final Item<ICellPopulator<TeamCalDO>> item, final String componentId, final IModel<TeamCalDO> rowModel)
      {
        final TeamCalDO teamCal = rowModel.getObject();
        final TeamCalRight right = (TeamCalRight) teamCalDao.getUserRight();
        String label;
        if (right.isOwner(getUser(), teamCal) == true) {
          label = getString("plugins.teamcal.owner");
        } else if (right.hasFullAccess(teamCal, getUserId()) == true) {
          label = getString("plugins.teamcal.fullAccess");
        } else if (right.hasReadonlyAccess(teamCal, getUserId()) == true) {
          label = getString("plugins.teamcal.readonlyAccess");
        } else if (right.hasMinimalAccess(teamCal, getUserId()) == true) {
          label = getString("plugins.teamcal.minimalAccess");
        } else if (isAdminUser == true) {
          label = getString("plugins.teamcal.adminAccess");
        } else {
          label = "???";
        }
        item.add(new Label(componentId, label));
        cellItemListener.populateItem(item, componentId, rowModel);
      }
    });
    columns.add(new CellItemListenerPropertyColumn<TeamCalDO>(getString("lastUpdate"), getSortable("lastUpdate", sortable), "lastUpdate",
        cellItemListener));
    if (isCalledBySearchPage() == false) {
      // Don't call by search page, because there is no form to show the popup-dialog.
      // ics export buttons
      columns.add(new AbstractColumn<TeamCalDO, String>(new Model<String>(getString("plugins.teamcal.subscription"))) {
        /**
         * @see org.projectforge.web.wicket.CellItemListenerPropertyColumn#populateItem(org.apache.wicket.markup.repeater.Item,
         *      java.lang.String, org.apache.wicket.model.IModel)
         */
        @Override
        public void populateItem(final Item<ICellPopulator<TeamCalDO>> item, final String componentId, final IModel<TeamCalDO> rowModel)
        {
          if (accessChecker.isRestrictedUser() == false) {
            final TeamCalDO teamCal = rowModel.getObject();
            item.add(new AjaxIconLinkPanel(componentId, IconType.SUBSCRIPTION, new ResourceModel("plugins.teamcal.subscription.tooltip")) {
              @Override
              public void onClick(final AjaxRequestTarget target)
              {
                icsExportDialog.redraw(teamCal);
                icsExportDialog.addContent(target);
                icsExportDialog.setCalendarTitle(target, teamCal.getTitle());
                icsExportDialog.open(target);
              };
            });
          }
        }
      });
    }
    return columns;
  }

  protected TeamCalFilter getFilter()
  {
    return form.getFilter();
  }

  /**
   * @see org.projectforge.web.wicket.AbstractListPage#getBaseDao()
   */
  @Override
  protected TeamCalDao getBaseDao()
  {
    return teamCalDao;
  }

  /**
   * @see org.projectforge.web.wicket.AbstractListPage#newListForm(org.projectforge.web.wicket.AbstractListPage)
   */
  @Override
  protected TeamCalListForm newListForm(final AbstractListPage< ? , ? , ? > parentPage)
  {
    return new TeamCalListForm(this);
  }

  /**
   * @see org.projectforge.web.wicket.AbstractListPage#init()
   */
  @SuppressWarnings("serial")
  @Override
  protected void init()
  {
    final MyICSExportDialog exportDialog = new MyICSExportDialog(newModalDialogId());
    TeamCalListPage.this.add(exportDialog);
    exportDialog.init();
    {
      final ContentMenuEntryPanel menuEntry = new ContentMenuEntryPanel(getNewContentMenuChildId(), new AjaxLink<Void>("link") {
        @Override
        public void onClick(final AjaxRequestTarget target)
        {
          openExportICSDialog(exportDialog, target, "plugins.teamcal.export.timesheets", CalendarFeed.getUrl4Timesheets(getUserId()));
        };
      }, getString("plugins.teamcal.export.timesheets"));
      addContentMenuEntry(menuEntry);
    }
    {
      final ContentMenuEntryPanel menuEntry = new ContentMenuEntryPanel(getNewContentMenuChildId(), new AjaxLink<Void>("link") {
        @Override
        public void onClick(final AjaxRequestTarget target)
        {
          openExportICSDialog(exportDialog, target, "plugins.teamcal.export.holidays", CalendarFeed.getUrl4Holidays());
        };
      }, getString("plugins.teamcal.export.holidays")).setTooltip(getString("plugins.teamcal.export.holidays.tooltip"));
      addContentMenuEntry(menuEntry);
    }
    {
      final ContentMenuEntryPanel menuEntry = new ContentMenuEntryPanel(getNewContentMenuChildId(), new AjaxLink<Void>("link") {
        @Override
        public void onClick(final AjaxRequestTarget target)
        {
          openExportICSDialog(exportDialog, target, "plugins.teamcal.export.weekOfYears", CalendarFeed.getUrl4WeekOfYears());
        };
      }, getString("plugins.teamcal.export.weekOfYears")).setTooltip(getString("plugins.teamcal.export.weekOfYears.tooltip"));
      addContentMenuEntry(menuEntry);
    }

    dataTable = createDataTable(createColumns(this, true), "title", SortOrder.ASCENDING);
    form.add(dataTable);
    icsExportDialog = new TeamCalICSExportDialog(newModalDialogId());
    add(icsExportDialog);
    icsExportDialog.init();
  }

  private void openExportICSDialog(final MyICSExportDialog exportDialog, final AjaxRequestTarget target, final String titleKey,
      final String url)
  {
    exportDialog.title = getString(titleKey);
    exportDialog.addContent(target).addTitleLabel(target);
    exportDialog.redraw();
    exportDialog.url = url;
    exportDialog.open(target);
  }

  class MyICSExportDialog extends AbstractICSExportDialog
  {
    private static final long serialVersionUID = -1829962601576743330L;

    String url;

    String title;

    @SuppressWarnings("serial")
    public MyICSExportDialog(final String id)
    {
      super(id, null);
      setTitle(new Model<String>() {
        /**
         * @see org.apache.wicket.model.Model#getObject()
         */
        @Override
        public String getObject()
        {
          return title;
        }
      });
    }

    /**
     * @see org.projectforge.web.calendar.AbstractICSExportDialog#getUrl()
     */
    @Override
    protected String getUrl()
    {
      return url;
    }
  };
}
TOP

Related Classes of org.projectforge.plugins.teamcal.admin.TeamCalListPage$MyICSExportDialog

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.