예제 #1
0
public class BbzrServiceImpl extends EasyServiceImpl<Uebergabeblatt, Serializable>
    implements BbzrService {

  private static Logger log = Logger.getLogger(BbzrServiceImpl.class);

  public BbzrServiceImpl() {
    super(Uebergabeblatt.class);
  }

  @Override
  public void fill(Uebergabeblatt bbzr, Collection<FetchPlan> plans) {
    if (log.isDebugEnabled()) log.debug("Entering BbzrServiceImpl:fill()");

    if (plans.contains(FetchPlan.BBZR_HEADER)
        || plans.contains(FetchPlan.UEB_HEADER_SENDER)
        || plans.contains(FetchPlan.UEB_HEADER_EMPFAENGER)) {
      Hibernate.initialize(bbzr.getHeader());

      if (plans.contains(FetchPlan.UEB_HEADER_SENDER) && bbzr.getHeader() != null)
        Hibernate.initialize(bbzr.getHeader().getSender());
      if (plans.contains(FetchPlan.UEB_HEADER_EMPFAENGER) && bbzr.getHeader() != null) {
        Header h = bbzr.getHeader();
        Hibernate.initialize(h.getEmpfaenger());
      }
    }

    if (plans.contains(FetchPlan.BBZR_BAUMASSNAHMEN)) {
      Hibernate.initialize(bbzr.getMassnahmen());
      for (Massnahme m : bbzr.getMassnahmen()) {
        if (m == null) continue;

        if (plans.contains(FetchPlan.ZVF_MN_VERSION)) {
          Hibernate.initialize(m.getVersion());
        }
        if (plans.contains(FetchPlan.ZVF_MN_STRECKEN)) {
          Hibernate.initialize(m.getStrecke());

          if (plans.contains(FetchPlan.ZVF_MN_STRECKE_STRECKEVZG)) {
            StreckeService streckeService = EasyServiceFactory.getInstance().createStreckeService();
            streckeService.fill(m.getStrecke(), plans);
          }
        }
        if (plans.contains(FetchPlan.ZVF_MN_BBPSTRECKE)) {
          Hibernate.initialize(m.getBbp());
        }
        if (plans.contains(FetchPlan.ZVF_MN_ALLG_REGELUNGEN)) {
          Hibernate.initialize(m.getAllgregelungen());
        }
        if (plans.contains(FetchPlan.BBZR_MN_ZUEGE)) {
          Hibernate.initialize(m.getZug());
          if (m.getZug() != null) {
            // uebergabeblattspezifische fetchplans entfernen
            FetchPlan[] newFetchPlans = new FetchPlan[0];
            List<FetchPlan> newPlans = new ArrayList<FetchPlan>(plans);
            newPlans.remove(FetchPlan.UEB_MN_ZUEGE);
            newPlans.remove(FetchPlan.UEB_KNOTENZEITEN);
            newPlans.remove(FetchPlan.UEB_BEARBEITUNGSSTATUS);
            newFetchPlans = newPlans.toArray(newFetchPlans);
            ZugService zugService = EasyServiceFactory.getInstance().createZugService();
            zugService.fill(m.getZug(), newFetchPlans);
          }
        }
      }
    }
  }
}
public class TopProjektListAction extends BaseAction {

  private static final Logger log = Logger.getLogger(TopProjektListAction.class);

  @Override
  protected ActionForward run(
      ActionMapping mapping,
      ActionForm form,
      HttpServletRequest request,
      HttpServletResponse response)
      throws Exception {
    if (log.isDebugEnabled()) log.debug("Entering TopProjektListAction.");

    TqmUser secUser = getSecUser();

    // Rechtepruefung
    if (!secUser.hasAuthorization("ROLE_TOPPROJEKT_LESEN_ALLE")
        && !secUser.hasAuthorization("ROLE_TOPPROJEKT_LESEN_REGIONALBEREICH"))
      return mapping.findForward("ACCESS_DENIED");

    TopProjektFilterForm filterForm = (TopProjektFilterForm) form;

    if (request.getParameter("reset") != null) {
      filterForm.reset();
    }

    Integer listPageNumber = FrontendHelper.castStringToInteger(request.getParameter("page"));
    if (listPageNumber == null) listPageNumber = 1;

    Integer count = PaginatedList.LIST_OBJECTS_PER_PAGE;
    Integer start = (listPageNumber - 1) * count;
    if (request.getParameter(TableTagParameters.PARAMETER_EXPORTING) != null) {
      count = null;
      start = null;
    }

    // ///////////////
    // Sorting
    String listSortColumn = null;
    SortOrderEnum listSortOrder = null;

    if (FrontendHelper.stringNotNullOrEmpty(request.getParameter("sort"))) {
      // Sortierkriterium aus Request verwenden, wenn vorhanden
      listSortColumn = request.getParameter("sort");
    }

    if ("asc".equalsIgnoreCase(request.getParameter("dir"))) {
      listSortOrder = SortOrderEnum.ASCENDING;
    } else if ("desc".equalsIgnoreCase(request.getParameter("dir"))) {
      listSortOrder = SortOrderEnum.DESCENDING;
    }

    // Sortierparameter anpassen
    if (listSortColumn == null) {
      listSortColumn = "name";
      listSortOrder = SortOrderEnum.ASCENDING;
    }

    List<Order> sortOrders = new LinkedList<Order>();

    if (listSortOrder != null) {
      if (listSortOrder == SortOrderEnum.ASCENDING) {
        sortOrders.add(Order.asc(listSortColumn));
      } else if (listSortOrder == SortOrderEnum.DESCENDING) {
        sortOrders.add(Order.desc(listSortColumn));
      }
    }
    // /////////////////////////

    Map<String, Object> searchCriteria = new HashMap<String, Object>();
    if (filterForm.getSapProjektNummer() != null) {
      searchCriteria.put(TopProjektService.SAP_NUMMER, filterForm.getSapProjektNummer());
    }

    PaginatedList<TopProjekt> projekte =
        serviceFactory
            .createTopProjektService()
            .findPaginatedBySort(
                sortOrders,
                searchCriteria,
                start,
                count,
                new Preload[] {new Preload(TopProjekt.class, "regionalbereich")},
                sessionFahrplanjahr);
    projekte.setObjectsPerPage(PaginatedList.LIST_OBJECTS_PER_PAGE);
    projekte.setPageNumber(listPageNumber);
    projekte.setSortDirection(listSortOrder);

    if (FrontendHelper.stringNotNullOrEmpty(listSortColumn)) {
      projekte.setSortCriterion(listSortColumn);
      request.setAttribute("sort", listSortColumn);
    }

    // Sortierung als Parameter zurückgeben, weil Displaytag die Methode
    // baumassnahmeList.getSortDirection nicht korrekt auswertet
    if (listSortOrder == SortOrderEnum.ASCENDING) {
      request.setAttribute("dir", "asc");
    } else if (listSortOrder == SortOrderEnum.DESCENDING) {
      request.setAttribute("dir", "desc");
    }
    request.setAttribute("projekte", projekte);

    Calendar cal = Calendar.getInstance();
    cal.setTime(new Date());
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
    SimpleDateFormat dateFormatToCompare = new SimpleDateFormat("yyyy.MM.dd");
    String datumVonToCompare = null;
    String datumBisToCompare = null;

    if (FrontendHelper.castStringToDate(request.getParameter("datumBis")) != null) {
      filterForm.setDatumBis(
          dateFormat.format(FrontendHelper.castStringToDate(request.getParameter("datumBis"))));
      datumBisToCompare =
          dateFormatToCompare.format(
              FrontendHelper.castStringToDate(request.getParameter("datumBis")));
    } else if (filterForm.getDatumBis() != null) {
      datumBisToCompare =
          dateFormatToCompare.format(FrontendHelper.castStringToDate(filterForm.getDatumBis()));
      filterForm.setDatumBis(filterForm.getDatumBis());
    } else {
      filterForm.setDatumBis(dateFormat.format(cal.getTime()));
      datumBisToCompare = dateFormatToCompare.format(cal.getTime());
    }

    if (FrontendHelper.castStringToDate(request.getParameter("datumVon")) != null) {
      filterForm.setDatumVon(
          dateFormat.format(FrontendHelper.castStringToDate(request.getParameter("datumVon"))));
      datumVonToCompare =
          dateFormatToCompare.format(
              FrontendHelper.castStringToDate(request.getParameter("datumVon")));
    } else if (filterForm.getDatumVon() != null) {
      datumVonToCompare =
          dateFormatToCompare.format(FrontendHelper.castStringToDate(filterForm.getDatumVon()));
      filterForm.setDatumVon(filterForm.getDatumVon());

    } else {
      cal.add(Calendar.DAY_OF_MONTH, -7);
      filterForm.setDatumVon(dateFormat.format(cal.getTime()));
      datumVonToCompare = dateFormatToCompare.format(cal.getTime());
    }

    request.setAttribute("datumVonToCompare", datumVonToCompare);
    request.setAttribute("datumBisToCompare", datumBisToCompare);

    return mapping.findForward("SUCCESS");
  }
}
예제 #3
0
/**
 * Voter, der abstimmt, ob ein Benutzer Zugriffsrechte auf eine Baumassnahme hat.
 *
 * @author Sebastian Hennebrueder
 */
public class BBZRAnyVoter implements EasyAccessDecisionVoter {

  Logger logger = Logger.getLogger(BBZRAnyVoter.class);

  public boolean supports(ConfigAttribute attribute) {
    // currently accept all kind of authorizations
    return true;
  }

  @SuppressWarnings("unchecked")
  public boolean supports(Class clazz) {
    return clazz == Uebergabeblatt.class;
  }

  @SuppressWarnings("unchecked")
  /*
   * Gibt ACCESS_GRANTED zurueck, wenn der Benutzer eine Rolle hat, die ihm eine der
   * requestedAuthorizations auf die Baumassnahme erlaubt.
   *
   * <pre> requested: baumassnahme_bewerten, granted: baumassnahme_bewerten_alle oder
   * baumassnahme_bewerten_region, wenn die Region dem Benutzer zugeordnet ist </pre>
   */
  public int vote(Authentication authentication, Object object, ConfigAttributeDefinition config) {
    int result = ACCESS_DENIED;

    User user = UserServiceImpl.getCurrentApplicationUser();
    Uebergabeblatt zvf = (Uebergabeblatt) object;
    Iterator iter = config.getConfigAttributes();
    while (iter.hasNext()) { // Schleife über erforderliche Berechtigungen
      ConfigAttribute attribute = (ConfigAttribute) iter.next();
      if (supports(attribute)) {
        GrantedAuthority[] authorities = authentication.getAuthorities();

        // Schleife über vorhandene Berechtigungen
        for (int i = 0; i < authorities.length; i++) {
          if (authorities[i].getAuthority().startsWith(attribute.getAttribute())) {
            if (logger.isDebugEnabled())
              logger.debug(String.format("Found authority %s", authorities[i]));

            // Zentral
            if (authorities[i].getAuthority().endsWith("_ALLE")) result = ACCESS_GRANTED;
            // Regional
            else if (authorities[i].getAuthority().endsWith("_REGIONALBEREICH")) {
              if (attribute.getAttribute().startsWith("ROLE_BBZR_ANLEGEN")) {
                result = ACCESS_GRANTED;
              } else if (user.getRegionalbereich() != null) {
                // MasterRB
                try {
                  String masterRB =
                      zvf.getMassnahmen().iterator().next().getMasterniederlassung().substring(3);
                  if (user.getRegionalbereich().getName().equalsIgnoreCase(masterRB))
                    result = ACCESS_GRANTED;
                } catch (NoSuchElementException e) {
                }
              }
            }
            if (result == ACCESS_GRANTED) break;
          }
        }
      }
    }

    return result;
  }

  /**
   * Gibt ACCESS_GRANTED zurueck, wenn der Benutzer eine Rolle hat, die ihm eine der
   * requestedAuthorizations auf die Baumassnahme erlaubt.
   *
   * <pre>
   *  requested: baumassnahme_bewerten, granted: baumassnahme_bewerten_alle oder baumassnahme_bewerten_region, wenn die Region dem Benutzer zugeordnet ist
   * </pre>
   *
   * @param tqmUser
   * @param domainObject - sollte eine Baumassnahme sein
   * @param requestedAuthorizations
   * @return
   */
  public int vote(final TqmUser tqmUser, Object domainObject, String requestedAuthorizations) {
    Authentication authentication =
        new Authentication() {

          private static final long serialVersionUID = 6602266556656215575L;

          public GrantedAuthority[] getAuthorities() {
            return tqmUser.getAuthorities();
          }

          public Object getCredentials() {
            return null;
          }

          public Object getDetails() {
            return tqmUser;
          }

          public Object getPrincipal() {
            return tqmUser;
          }

          public boolean isAuthenticated() {
            return true;
          }

          public void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException {}

          public String getName() {
            return tqmUser.getUsername();
          }
        };

    String[] splits = requestedAuthorizations.split(",");
    ConfigAttributeDefinition definition = new ConfigAttributeDefinition();
    for (String singleAuthorization : splits) {
      definition.addConfigAttribute(new SecurityConfig(singleAuthorization.trim()));
    }

    return vote(authentication, domainObject, definition);
  }
}