Package org.projectforge.web.doc

Source Code of org.projectforge.web.doc.TutorialPage

/////////////////////////////////////////////////////////////////////////////
//
// 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.web.doc;

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

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.hibernate.criterion.Restrictions;
import org.projectforge.access.AccessDao;
import org.projectforge.access.GroupTaskAccessDO;
import org.projectforge.core.BaseDO;
import org.projectforge.core.BaseDao;
import org.projectforge.core.QueryFilter;
import org.projectforge.task.TaskDO;
import org.projectforge.task.TaskDao;
import org.projectforge.task.TaskTree;
import org.projectforge.user.GroupDO;
import org.projectforge.user.GroupDao;
import org.projectforge.user.PFUserDO;
import org.projectforge.user.ProjectForgeGroup;
import org.projectforge.user.UserDao;
import org.projectforge.user.UserGroupCache;
import org.projectforge.web.access.AccessEditPage;
import org.projectforge.web.task.TaskEditPage;
import org.projectforge.web.user.GroupEditPage;
import org.projectforge.web.user.UserEditPage;
import org.projectforge.web.wicket.AbstractEditPage;
import org.projectforge.web.wicket.AbstractSecuredPage;
import org.projectforge.web.wicket.MessagePage;
import org.projectforge.web.wicket.WicketUtils;

/**
* Standard error page should be shown in production mode.
*
* @author Kai Reinhard (k.reinhard@micromata.de)
*
*/
public class TutorialPage extends AbstractSecuredPage
{
  private static final long serialVersionUID = 6326263860561990911L;

  private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(TutorialPage.class);

  private static final String KEY_TYPE = "type";

  private static final String KEY_REF = "ref";

  private static final String TYPE_CREATE_ACCESS = "createAccess";

  private static final String TYPE_CREATE_GROUP = "createGroup";

  private static final String TYPE_CREATE_USER = "createUser";

  private static final String TYPE_CREATE_TASK = "createTask";

  private static final String REF_TASK_JAVA_GURUS = "JavaGurus";

  private static final String REF_TASK_ACME_WEBPORTAL = "ACME-WebPortal";

  private static final String REF_GROUP_JAVA_GURUS = "JavaGurusEmployees";

  private static final String REF_GROUP_ACME_WEBPORTAL = "ACME-WebPortal-Team";

  private static final String ACCESS_TEMPLATE_EMPLOYEE = "employee";

  private final String type;

  private final String reference;

  @SpringBean(name = "accessDao")
  private AccessDao accessDao;

  @SpringBean(name = "groupDao")
  private GroupDao groupDao;

  @SpringBean(name = "userDao")
  private UserDao userDao;

  @SpringBean(name = "userGroupCache")
  private UserGroupCache userGroupCache;

  @SpringBean(name = "taskDao")
  private TaskDao taskDao;

  @SpringBean(name = "taskTree")
  private TaskTree taskTree;

  public TutorialPage(final PageParameters params)
  {
    super(params);
    type = WicketUtils.getAsString(params, KEY_TYPE);
    reference = WicketUtils.getAsString(params, KEY_REF);
    if (TYPE_CREATE_USER.equals(type) == true) {
      createUser();
    } else if (TYPE_CREATE_GROUP.equals(type) == true) {
      createGroup();
    } else if (TYPE_CREATE_TASK.equals(type) == true) {
      createTask();
    } else if (TYPE_CREATE_ACCESS.equals(type) == true) {
      createAccess();
    } else {
      log.warn("Unknown tutorial request: type=" + type);
      setResponsePage(new MessagePage("tutorial.unknown").setWarning(true));
    }
  }

  private void createUser()
  {
    final String tutorialReference = getTutorialReference(reference);
    if (doesEntryAlreadyExist(userDao, tutorialReference) == true) {
      return;
    }
    final PFUserDO user;
    List<Integer> groupsToAdd = null;
    if ("linda".equals(reference) == true) {
      user = createUser("linda", "Evans", "Linda", "l.evans@javagurus.com", addTutorialReference("Project manager", tutorialReference));
      groupsToAdd = addGroups(user, ProjectForgeGroup.PROJECT_MANAGER);
    } else if ("dave".equals(reference) == true) {
      user = createUser("dave", "Jones", "Dave", "d.jones@javagurus.com", addTutorialReference("Developer", tutorialReference));
    } else if ("betty".equals(reference) == true) {
      user = createUser("betty", "Brown", "Betty", "b.brown@javagurus.com", addTutorialReference("Developer", tutorialReference));
    } else {
      log.warn("Unknown tutorial request: user=" + reference);
      setResponsePage(new MessagePage("tutorial.unknown").setWarning(true));
      return;
    }
    final UserEditPage userEditPage = new UserEditPage(user, groupsToAdd);
    setResponsePage(userEditPage);
  }

  private String getTutorialReference(final String reference)
  {
    return "{tutorial-ref:" + reference + "}";
  }

  private String addTutorialReference(final String text, final String tutorialReference)
  {
    if (StringUtils.isEmpty(text) == true) {
      return tutorialReference;
    } else {
      return text + "\n" + tutorialReference;
    }
  }

  private PFUserDO createUser(final String userName, final String lastName, final String firstName, final String email,
      final String description)
  {
    final PFUserDO user = new PFUserDO();
    user.setUsername(userName);
    user.setEmail(email);
    user.setLastname(lastName);
    user.setFirstname(firstName);
    user.setDescription(description);
    return user;
  }

  private List<Integer> addGroups(final PFUserDO user, final ProjectForgeGroup... groups)
  {
    final List<Integer> groupsToAssign = new ArrayList<Integer>();
    final GroupDO group = userGroupCache.getGroup(ProjectForgeGroup.PROJECT_MANAGER);
    groupsToAssign.add(group.getId());
    return groupsToAssign;
  }

  private void createTask()
  {
    final String tutorialReference = getTutorialReference(reference);
    if (doesEntryAlreadyExist(taskDao, tutorialReference) == true) {
      return;
    }
    final TaskDO task;
    if (REF_TASK_JAVA_GURUS.equals(reference) == true) {
      task = createTask(taskTree.getRootTaskNode().getTask(), "Java Gurus inc.", tutorialReference);
    } else if (REF_TASK_ACME_WEBPORTAL.equals(reference) == true) {
      task = createTask(taskTree.getRootTaskNode().getTask(), "ACME web portal", tutorialReference);
    } else {
      log.warn("Unknown tutorial request: task=" + reference);
      setResponsePage(new MessagePage("tutorial.unknown").setWarning(true));
      return;
    }
    final TaskEditPage taskEditPage = new TaskEditPage(task);
    setResponsePage(taskEditPage);
  }

  private TaskDO createTask(final TaskDO parentTask, final String title, final String description)
  {
    final TaskDO task = new TaskDO();
    task.setParentTask(parentTask);
    task.setTitle(title);
    task.setDescription(description);
    return task;
  }

  private void createGroup()
  {
    final String tutorialReference = getTutorialReference(reference);
    if (doesEntryAlreadyExist(groupDao, tutorialReference) == true) {
      return;
    }
    final GroupDO group;
    if (REF_GROUP_JAVA_GURUS.equals(reference) == true) {
      group = createGroup("JavaGurus employees", "linda", "dave", "betty");
    } else if (REF_GROUP_ACME_WEBPORTAL.equals(reference) == true) {
      group = createGroup("ACME web portal team", "linda", "dave", "betty");
    } else {
      log.warn("Unknown tutorial request: group=" + reference);
      setResponsePage(new MessagePage("tutorial.unknown").setWarning(true));
      return;
    }
    if (group != null) {
      group.setDescription(tutorialReference);
      final GroupEditPage groupEditPage = new GroupEditPage(group);
      setResponsePage(groupEditPage);
    }
  }

  private GroupDO createGroup(final String name, final String... usernames)
  {
    final GroupDO group = new GroupDO();
    group.setName(name);
    if (usernames != null) {
      for (final String username : usernames) {
        final PFUserDO user = getRequiredUser(username);
        if (user == null) {
          return null;
        }
        group.addUser(user);
      }
    }
    return group;
  }

  private void createAccess()
  {
    final String tutorialReference = getTutorialReference(reference);
    if (doesEntryAlreadyExist(accessDao, tutorialReference) == true) {
      return;
    }
    final GroupTaskAccessDO access;
    TaskDO task = null;
    GroupDO group = null;
    if ("JavaGurusEmployees".equals(reference) == true) {
      task = getRequiredTask(REF_TASK_JAVA_GURUS);
      group = getRequiredGroup(REF_GROUP_JAVA_GURUS);
      access = createAccess(task, group, ACCESS_TEMPLATE_EMPLOYEE, tutorialReference);
    } else if ("ACME-WebPortal".equals(reference) == true) {
      task = getRequiredTask(REF_TASK_ACME_WEBPORTAL);
      group = getRequiredGroup(REF_GROUP_ACME_WEBPORTAL);
      access = createAccess(task, group, ACCESS_TEMPLATE_EMPLOYEE, tutorialReference);
    } else {
      log.warn("Unknown tutorial request: task=" + reference);
      setResponsePage(new MessagePage("tutorial.unknown").setWarning(true));
      return;
    }
    if (task == null || group == null) {
      return;
    }
    final AccessEditPage accessEditPage = new AccessEditPage(access);
    setResponsePage(accessEditPage);
  }

  private GroupTaskAccessDO createAccess(final TaskDO task, final GroupDO group, final String template, final String description)
  {
    final GroupTaskAccessDO access = new GroupTaskAccessDO();
    access.setTask(task);
    access.setGroup(group);
    if (ACCESS_TEMPLATE_EMPLOYEE.equals(template) == true) {
      access.employee();
    }
    access.setDescription(description);
    return access;
  }

  private boolean doesEntryAlreadyExist(final BaseDao< ? > dao, final String tutorialReference)
  {
    final BaseDO< ? > obj = getEntry(dao, tutorialReference);
    if (obj != null) {
      if (obj instanceof PFUserDO) {
        setResponsePage(new UserEditPage(createEditPageParameters(obj)));
      } else if (obj instanceof GroupDO) {
        setResponsePage(new GroupEditPage(createEditPageParameters(obj)));
      } else if (obj instanceof TaskDO) {
        setResponsePage(new TaskEditPage(createEditPageParameters(obj)));
      } else if (obj instanceof GroupTaskAccessDO) {
        setResponsePage(new AccessEditPage(createEditPageParameters(obj)));
      } else {
        setResponsePage(new MessagePage("tutorial.objectAlreadyCreated", tutorialReference).setWarning(true));
      }
      return true;
    }
    return false;
  }

  private PageParameters createEditPageParameters(final BaseDO< ? > obj)
  {
    final PageParameters params = new PageParameters();
    params.add(AbstractEditPage.PARAMETER_KEY_ID, obj.getId());
    return params;
  }

  private BaseDO< ? > getEntry(final BaseDao< ? > dao, final String tutorialReference)
  {
    final QueryFilter filter = new QueryFilter();
    filter.add(Restrictions.ilike("description", "%" + tutorialReference + "%"));
    final List< ? > list = dao.internalGetList(filter);
    if (CollectionUtils.isNotEmpty(dao.internalGetList(filter)) == true) {
      return (BaseDO< ? >) list.get(0);
    }
    return null;
  }

  private GroupDO getRequiredGroup(final String reference)
  {
    final GroupDO group = (GroupDO) getEntry(groupDao, getTutorialReference(reference));
    if (group == null) {
      setResponsePage(new MessagePage("tutorial.expectedGroupNotFound", reference).setWarning(true));
    }
    return group;
  }

  private PFUserDO getRequiredUser(final String reference)
  {
    final PFUserDO user = (PFUserDO) getEntry(userDao, getTutorialReference(reference));
    if (user == null) {
      setResponsePage(new MessagePage("tutorial.expectedUserNotFound", reference).setWarning(true));
    }
    return user;
  }

  private TaskDO getRequiredTask(final String reference)
  {
    final TaskDO task = (TaskDO) getEntry(taskDao, getTutorialReference(reference));
    if (task == null) {
      setResponsePage(new MessagePage("tutorial.expectedTaskNotFound", reference).setWarning(true));
    }
    return task;
  }

  @Override
  protected String getTitle()
  {
    return "TutorialRedirectPage";
  }
}
TOP

Related Classes of org.projectforge.web.doc.TutorialPage

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.