Package enterprise.web_jpa_war.servlet

Source Code of enterprise.web_jpa_war.servlet.MaintainPersonServlet

/**
* Copyright 2011 The Apache Software Foundation
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package enterprise.web_jpa_war.servlet;

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import enterprise.web_jpa_war.entity.Person;
import enterprise.web_jpa_war.entity.Role;
import enterprise.web_jpa_war.entity.RoleRelationship;

/**
* Servlet implementation class MaintainPersonServlet
*/
public class MaintainPersonServlet extends AbstractServlet {
 

  private static final String SQL_UPDATE_PERSON = "UPDATE PERSON p " +
              "SET p.LAST_NAME = ?, p.FIRST_NAME = ?, p.ACCOUNT_NAME = UPPER(?), p.PASSWORD = ? " +
              "WHERE p.ID = ? ";
  private static final String SQL_QUERY_PERSON =
    "SELECT p.*, pr.PERSON_ROLE_ID, pr.ROLE_NAME FROM PERSON p JOIN PERSON_ROLES pr ON(p.ID = pr.PERSON_ID) " +
    "WHERE p.ID = ? ";
 
  private static final String SQL_DELETE_PERSON_ROLES =
    "DELETE FROM PERSON_ROLES WHERE PERSON_ID = ?";
 
  /**
   * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
   */
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    Long id = new Long(request.getParameter("id"));
   
    Connection connection = null;
    PreparedStatement statement = null;
    ResultSet resultSet = null;
    Person person = null;
    List<RoleRelationship> roleRelationships = null;
   
    try {
      connection = this.getConnection();
   
      statement = connection.prepareStatement(SQL_QUERY_PERSON);
      statement.setLong(1, id);
      resultSet = statement.executeQuery();
     
      if(resultSet.next()){
        person = new Person();
        person.setId(resultSet.getLong("ID"));
        person.setFirstName(resultSet.getString("FIRST_NAME"));
        person.setLastName(resultSet.getString("LAST_NAME"));
        person.setAccountName(resultSet.getString("ACCOUNT_NAME"));
        person.setPassword(resultSet.getString("PASSWORD"));
       
        roleRelationships = new ArrayList<RoleRelationship>();
       
        roleRelationships.add(generateRoleRelationship(resultSet));
        while(resultSet.next()){
          roleRelationships.add(generateRoleRelationship(resultSet));
        }
       
        person.setRoleRelationships(roleRelationships);
      }
    } catch (SQLException e) {
      e.printStackTrace();
      throw new RuntimeException("Maintain person(id:" + id + ")", e);
    }
   
    request.setAttribute("person", person);
    request.setAttribute("roles", getRolesString(person));
    request.getRequestDispatcher("/person/MaintainPerson.jsp").forward(request, response);
  }
 
  private String getRolesString(Person person){
    StringBuffer rolesString = new StringBuffer();
    List<Role> roles = person.getRoles();
    Role role = null;
    for(int a = 0; a < roles.size(); a++){
      role = roles.get(a);
      if(a == 0){
        rolesString.append("'" + role.getName() + "'");
      } else{
        rolesString.append(", '" + role.getName() + "'");
      }
    }
    return rolesString.toString();
  }

  private RoleRelationship generateRoleRelationship(ResultSet resultSet) throws SQLException {
    RoleRelationship roleRelationship;
    Role role;
    role = new Role();
    role.setId(resultSet.getLong("PERSON_ROLE_ID"));
    role.setName(resultSet.getString("ROLE_NAME"));
    roleRelationship = new RoleRelationship();
    roleRelationship.setRole(role);
   
    return roleRelationship;
  }

  /**
   * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
   */
  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      Long id = new Long(request.getParameter("id"));
      String lastName = request.getParameter("lastName");
      String firstName = request.getParameter("firstName");
      String accountName = request.getParameter("accountName");
      String[] roleNames = request.getParameterValues("roleName");
      String password = request.getParameter("password");
     
      Connection connection = null;
      PreparedStatement statement = null;
     
      try {
      connection = this.getConnection();
        connection.setAutoCommit(false);
       
        //1. update person
        statement = connection.prepareStatement(SQL_UPDATE_PERSON);
       
        statement.setString(1, lastName);
        statement.setString(2, firstName);
        statement.setString(3, accountName);
        statement.setString(4, password);
        statement.setLong(5, id);
        statement.execute();
       
        //2. delete roles
        statement = connection.prepareStatement(SQL_DELETE_PERSON_ROLES);
        statement.setLong(1, id);
        statement.execute();
       
        //3. re-insert selected roles
        List<Long> roleIds = this.getRoleIds(connection, roleNames);
        this.insertPersonRolesRelationship(accountName, roleNames, id, roleIds, connection);
       
      } catch (SQLException e) {
      e.printStackTrace();
      throw new RuntimeException("maintain for person(id:" + id + ") failed", e);
    } finally {
      closeStatement(statement);
      closeConnection(connection);
    }
        //Forward to the jsp page for rendering
        request.getRequestDispatcher("ListPerson").forward(request, response);
  }

}
TOP

Related Classes of enterprise.web_jpa_war.servlet.MaintainPersonServlet

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.