1   /*
2    * (C) Copyright 1989-2011 Trend Micro, Inc.
3    * All Rights Reserved.
4    *
5    * This program is an unpublished copyrighted work which is proprietary
6    * to Trend Micro, Inc. and contains confidential information that is not
7    * to be reproduced or disclosed to any other person or entity without
8    * prior written consent from Trend Micro, Inc. in each and every instance.
9    *
10   * WARNING:  Unauthorized reproduction of this program as well as
11   * unauthorized preparation of derivative works based upon the
12   * program or distribution of copies by sale, rental, lease or
13   * lending are violations of federal copyright laws and state trade
14   * secret laws, punishable by civil and criminal penalties.
15   */
16  
17  package com.trendmicro.grid.acl.ds.cache.commands;
18  
19  import com.trendmicro.grid.acl.ds.cache.CacheDestination;
20  import com.trendmicro.grid.acl.ds.cache.CacheSettings;
21  
22  import java.util.Map;
23  
24  /**
25   * Writes the given results to the cache.
26   *
27   * @author juergen_kellerer, 2011-03-31
28   * @version 1.0
29   */
30  public class CacheResultsCommand<K, V> extends AbstractCommand<K, V> {
31  
32  	protected Map<K, V> values;
33  	protected CacheDestination<K, V> destination;
34  	protected CacheDestination.Mode mode;
35  
36  	/**
37  	 * Constructs the command.
38  	 *
39  	 * @param values	  the values to write.
40  	 * @param destination the destination(s) to initiate a batch on.
41  	 * @param mode		the write mode to use.
42  	 */
43  	public CacheResultsCommand(Map<K, V> values, CacheDestination<K, V> destination, CacheDestination.Mode mode) {
44  		super(null);
45  
46  		// Important: We need to copy the data as the values may get used asynchronously
47  		// and external modifications must be avoided.
48  		this.values = new NonUniqueMap<K, V>(values.size());
49  		this.values.putAll(values);
50  		keys = this.values.keySet();
51  
52  		this.destination = destination;
53  		this.mode = mode;
54  	}
55  
56  	/**
57  	 * Returns this command as batch command.
58  	 *
59  	 * @return this command as batch command.
60  	 */
61  	public BatchCommand<K, V> asBatchCommand() {
62  		return new BatchCommand<K, V>(keys, this, destination);
63  	}
64  
65  	/**
66  	 * {@inheritDoc}
67  	 */
68  	@Override
69  	public Map<K, V> call() throws Exception {
70  		if (!CacheSettings.DISABLED) destination.putAll(values, mode);
71  
72  		return values;
73  	}
74  }