Package com.gadglet.gadgets.personalNotes.server

Source Code of com.gadglet.gadgets.personalNotes.server.RequestHandler

/**
* Copyright (C)  Gadglet .
*
* This file is part of Gadglet
*
* Gadglet is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Gadglet 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Gadglet. If not, see <http://www.gnu.org/licenses/>.
*/

package com.gadglet.gadgets.personalNotes.server;

import java.util.HashMap;
import java.util.List;
import java.util.logging.Logger;

import javax.jdo.PersistenceManager;
import javax.jdo.Query;

import com.gadglet.core.GadgletRequestWrapper;
import com.gadglet.core.GadgletResponse;
import com.gadglet.core.GadgletResponse.ContentRecord;
import com.gadglet.core.MingletRequestHandler;
import com.gadglet.core.RequestException;
import com.gadglet.data.SharedItemReff;
import com.gadglet.data.UserProfile;
import com.gadglet.data.UserProfilesUtils;
import com.gadglet.data.utils.ContentItemHelper;
import com.gadglet.data.utils.HasMoreItems;
import com.gadglet.data.utils.PMF;
import com.gadglet.gadgets.personalNotes.shared.Params;
import com.gadglet.params.FieldErrorTypes;
import com.gadglet.params.GadgetViewState;
import com.gadglet.params.ProfileFields;
import com.gadglet.params.ReqErrorTypes;
import com.gadglet.params.SharingType;

/**
* Gadglet server side handler class. This class is the Gadget server side
* entrypoint loaded by Gadglet platform for every request. When loaded,
* UserProfile (Minglet)is already loaded to the session and accessible by
* GadgletRequestWrapper methods
* The class name MUST be "RequestHandler" unless you define it specifically
* when defining the Gadget with the admin tool
*
* Gadglet platform will invoke the correct methods according to the requested
* "ReqActionTypes"
*
* @see com.gadglet.params.ReqActionTypes
* @see MingletRequestHandler
*/
public class RequestHandler extends MingletRequestHandler {
  Logger log = Logger.getLogger(this.getClass().getName());

  private final ContentItemHelper helper = new ContentItemHelper();

 
  /**
   * Delete all Personal notes (owned y the current user)
   *
   * This method is an example of custom RequestHandler method activated
   * by the use of client method
   * <p>
   *@see com.gadglet.client.gwt.core.GadgletQuery.setContentActoinName(String contentActoinName)
   * */
 
  @SuppressWarnings("unchecked")
  public void doDeleteAll(GadgletRequestWrapper request, GadgletResponse response)
   {
   
    PersistenceManager pm;   
    List <PersonalNotesData> items;
   
   
    pm = PMF.get().getPersistenceManager();
    Query qry = pm.newQuery(PersonalNotesData.class);
   
    qry.declareParameters("String ownerIdParam");
    qry.setFilter(" ownerId == ownerIdParam");
   
   
    try {
      // for some reason doesn't work with transaction
     
      items = (List<PersonalNotesData>) qry.execute(request.getCurrentUserId());
     
      pm.deletePersistentAll(items);
     
    } catch (Exception e) {
      log.warning(e.getMessage());
   
    } finally {
 
      pm.close();
    }
 
    
   }
  /**
   * Delete Personal note
   * */
  @Override
  public void doDelete(GadgletRequestWrapper request, GadgletResponse response)
      throws RequestException {
    helper.delete(request, PersonalNotesData.class);
  }

  /**
   * Share Personal note with a friend
   * */
  @Override
  public void doShare(GadgletRequestWrapper request, GadgletResponse res)
      throws RequestException {

    helper.shareItem(request, PersonalNotesData.class);
  }

  /**
   * Return a list of friends and their sharing definition for a given content
   * item
   * */
  @Override
  public void doSharedList(GadgletRequestWrapper request, GadgletResponse res)
      throws RequestException {

    PersonalNotesData item = (PersonalNotesData) helper.getSingleItemByKey(
        request, PersonalNotesData.class);

    if (!item.isOwnedByMe(request))
      throw new RequestException(ReqErrorTypes.UNAUTHORIZED_OPERATION);

    item.getFriendsSharing(request, res);

  }

  /**
   * Add a new Personal note
   * <p>
   * Example:
   * <li>Sending field level error code to the client (empty content)
   * <li>Sending field level error code to the client (content length)
   * <li>Sending field level error code to the client (value not valid)
   * <li>Sending error code to the client (user quota)
   * */
  @Override
  public void doAdd(GadgletRequestWrapper request, GadgletResponse response)
      throws RequestException {

    String msg = request.getParameter(Params.MESSAGE.getParamName());
    if (msg == null || msg.isEmpty()) {
      response.addFieldError(Params.MESSAGE.getParamName(),
          FieldErrorTypes.FIELD_IS_EMPTY);
      throw new RequestException(ReqErrorTypes.MISSING_ARGUMENT);
    }
    // String field is limited to 500 chars...
    if (msg.length() > 499)
      throw new RequestException(ReqErrorTypes.CONTENT_EXCEED_MAX_LENGTH);

    final int maxItemsForFreeAcount = 25;
    int priority = 0;

    try {
      priority = Integer.parseInt(request.getParameter(Params.PRIORITY
          .getParamName()));
    } catch (NumberFormatException e) {
      log.warning(e.getMessage());
      response.addFieldError(Params.PRIORITY.getParamName(),
          FieldErrorTypes.VALUE_NOT_VALID);
      throw new RequestException(ReqErrorTypes.MISSING_ARGUMENT);
    }

    HasMoreItems hasMore = new HasMoreItems();
    List<PersonalNotesData> items = (List<PersonalNotesData>) helper
        .getOwnerItems(request, PersonalNotesData.class,
            request.getFilterBy(),
            request.getFilterByDeclaration(), null, null, 0, 1000,
            hasMore);
    if (items.size() >= maxItemsForFreeAcount)
      throw new RequestException(
          ReqErrorTypes.ITEMS_NUM_EXCEED_USER_QUOTA);

    PersonalNotesData item = new PersonalNotesData(
        request.getTrustedParameterValue("personalNotesMessage", true),
        priority, request);

    helper.saveNew(item);
  }
  /**
   * Update Personal note
   * */
  @Override
  public void doUpdate(GadgletRequestWrapper request, GadgletResponse response)
      throws RequestException {
    // check imput
    String msg = request.getParameter(Params.MESSAGE.getParamName());

    if (msg == null || msg.isEmpty()) {
      response.addFieldError(Params.MESSAGE.getParamName(),
          FieldErrorTypes.FIELD_IS_EMPTY);

      throw new RequestException(ReqErrorTypes.MISSING_ARGUMENT);
    }
    PersonalNotesData item = (PersonalNotesData) helper.getSingleItemByKey(
        request, PersonalNotesData.class);
    item.setPersonalNotesMessage(msg);
    helper.updated(null, item, request);
  }

  /**
   * Return a list personal notes
   * */
  @Override
  public void doView(GadgletRequestWrapper request, GadgletResponse response)
      throws RequestException {
    HasMoreItems hasMore = new HasMoreItems();
    int returnedItems;
    HashMap<String, Object> params = null;
    if (request.getParameter(Params.PRIORITY.getParamName()) != null
        && !request.getParameter(Params.PRIORITY.getParamName())
            .isEmpty()) {
      params = new HashMap<String, Object>();
      try {
        params.put(Params.PRIORITY.getParamName(), Integer
            .parseInt(request.getParameter(Params.PRIORITY
                .getParamName())));
      } catch (NumberFormatException e) {

        log.warning(e.getMessage());
        throw new RequestException(ReqErrorTypes.MISSING_ARGUMENT);
      }
    }

    List<PersonalNotesData> items = (List<PersonalNotesData>) helper
        .getSharedItems(request, PersonalNotesData.class,
            request.getFilterBy(),
            request.getFilterByDeclaration(), params,
            request.getOrderBy(), request.getStartFrom(),
            request.getItemNum(), hasMore);

    // if the request is for 3 items the method getOwnerItems will try to
    // find 4 and then remove the last...
    returnedItems = items.size();
    if (hasMore.isTrue()) {
      response.setHasMore(true);
      returnedItems = returnedItems - 1;
    } else
      response.setHasMore(false);

    response.setAddPermit(true);

    response.setTotalItemsNum(returnedItems);

    int count = 0;
    for (PersonalNotesData item : items) {
      // exit in the last item
      if (count++ == returnedItems)
        break;
      String msg = null;

      if (!request.getGadgetViewState().equals(GadgetViewState.CANVAS)
          && item.getPersonalNotesMessage().length() > 30)
        msg = item.getPersonalNotesMessage().substring(0, 30) + "...";
      else
        msg = item.getPersonalNotesMessage();

      ContentRecord record = response.newItem();

      record.addItemKeyField(item.getContentItemKey());
      record.addItemField(Params.MESSAGE.getParamName(), msg);
      record.addItemField(Params.PRIORITY.getParamName(), new Integer(
          item.getPriority()).toString());

      List<SharedItemReff> shares = item.getSharedItemReff();
      boolean isOwner = false;
      boolean isEditor = false;

      if (shares != null) {

        for (SharedItemReff share : shares) {
          if (share.getSharedWithId().equals(
              request.getCurrentUserProfileId())
              && share.getSharingType().equals(SharingType.OWNER)) {
            isOwner = true;
            isEditor = true;
          }

          if (share.getSharedWithId().equals(
              request.getCurrentUserProfileId())
              && share.getSharingType().equals(SharingType.EDIT))
            isEditor = true;
        }

        record.setGadgetPermissions(isEditor, isOwner, isOwner);

        if (!isOwner) {
          // send info about the owner
          UserProfile owner = UserProfilesUtils.getProfileById(item
              .getOwnerId());

          if (owner != null && !owner.isPrivate()) {
            if (owner.getNickName() != null)
              record.addItemField(ProfileFields.PROFILE_NICKNAME
                  .getParamName(), owner.getNickName());
            if (owner.getPhotoUrl() != null
                && owner.getPhotoUrl().length() > 0)
              record.addItemField(
                  ProfileFields.PROFILE_THUMBNAILURL
                      .getParamName(), owner
                      .getPhotoUrl());

          }

        }
      }

    }

  }

 
 
}
TOP

Related Classes of com.gadglet.gadgets.personalNotes.server.RequestHandler

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.