All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.gemstone.gemfire.internal.cache.execute.MemberMappedArgument Maven / Gradle / Ivy

/*
 * Copyright (c) 2010-2015 Pivotal Software, Inc. All rights reserved.
 *
 * Licensed 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. See accompanying
 * LICENSE file.
 */
package com.gemstone.gemfire.internal.cache.execute;

import java.io.Serializable;
import java.util.Map;

/**
 * Arguments for a function need to be conditionalized on the target member.
 * Pass an argument that contains a default object as well as a map of member id to
 * Serializable. When the function is distributed, the* target member is looked up in
 * this map by the function service. If the target member id has a value in the
 * map, then that value is used as an argument for that distribution. If that
 * member id is not found, then the default value is used as an argument
 * instead.
 * 
 * For the GemFireXD, its use would be as follows: The defaultArgument is set
 * to be the query string. The keys of the map are set to be all known member
 * ids that have already prepared this statement, and the values are all null
 * (to be interpreted as no argument).
 * 
 * This way, when the function is distributed to a member that is not in the
 * map, it will include the query string as an argument. When it is sent to a
 * member that is in the map, will not include the query string as an argument.
 * 
 * @author Yogesh Mahajan
 * @since 6.0
 * 
 */
public class MemberMappedArgument implements Serializable{

  private static final long serialVersionUID = -6465867775653599576L;

  private Object defaultArgument;

  private Map memberToArgMap;

  public MemberMappedArgument(Object defaultArgument,
      Map memberToArgMap) {
    this.defaultArgument = defaultArgument;
    this.memberToArgMap = memberToArgMap;
  }

  public Object getArgumentsForMember(String memberId) {
    if (memberToArgMap.containsKey(memberId)) {
      return memberToArgMap.get(memberId);
    }
    else {
      return this.defaultArgument;
    }
  }
  
  public Object getDefaultArgument() {
    return this.defaultArgument;
  }
  //TODO:Asif: Not good to return the refernec of the mapping. Should we return a copy?
  public Map getMemberSpecificArgumentsMap() {
    return this.memberToArgMap;
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy