// Path: src/main/java/com/amebame/triton/server/TritonServerCleaner.java
// @Singleton
// public class TritonServerCleaner {
// 	
// 	private static final Logger log = LogManager.getLogger(TritonServerCleaner.class);
// 	
// 	private List<TritonCleaner> cleaners;
// 
// 	public TritonServerCleaner() {
// 		this.cleaners = new ArrayList<TritonCleaner>();
// 	}
// 
// 	public void add(TritonCleaner cleaner) {
// 		this.cleaners.add(cleaner);
// 	}
// 	
// 	public void add(final Runnable runnable) {
// 		this.cleaners.add(new TritonCleaner() {
// 			@Override
// 			public void clean() {
// 				runnable.run();
// 			}
// 		});
// 	}
// 	
// 	public void clean() {
// 		for (TritonCleaner cleaner : cleaners) {
// 			try {
// 				cleaner.clean();
// 			} catch (Exception e) {
// 				log.error("failed to cleanup", e);
// 			}
// 		}
// 	}
// }
// 
// Path: src/main/java/com/amebame/triton/server/TritonServerContext.java
// @Singleton
// public class TritonServerContext {
// 	
// 	private TritonServerMethodMap methodMap;
// 	
// 	@Inject
// 	public TritonServerContext(TritonServerConfiguration config) {
// 		methodMap = new TritonServerMethodMap();
// 	}
// 	
// 	/**
// 	 * Add server methods from the target object
// 	 * @param target
// 	 */
// 	public void addServerMethod(Object target) {
// 		methodMap.register(target);
// 	}
// 	
// 	/**
// 	 * Get server method by name
// 	 * @param name
// 	 * @return
// 	 */
// 	public TritonServerMethod getServerMethod(String name) {
// 		return methodMap.getMethod(name);
// 	}
// }
// 
// Path: src/main/java/com/amebame/triton/service/memcached/method/TritonMemcachedMethods.java
// public class TritonMemcachedMethods {
// 
// 	private TritonMemcachedClient client;
// 	
// 	@Inject
// 	public TritonMemcachedMethods(TritonMemcachedClient client) {
// 		this.client = client;
// 	}
// 
// 	@TritonMethod("memcached.get")
// 	public Object get(GetCache data) {
// 		String cluster = data.getCluster();
// 		if (data.getKey() != null) {
// 			// get by single key
// 			return client.get(cluster, data.getKey(), data.getExpire());
// 		} else {
// 			// get by multiple keys
// 			return client.getMulti(cluster, data.getKeys());
// 		}
// 	}
// 	
// 	@TritonMethod("memcached.set")
// 	public boolean set(SetCache data) {
// 		if (data.getKey() != null) {
// 			// set single key-value data
// 			client.set(
// 					data.getCluster(),
// 					data.getKey(),
// 					data.getExpire(),
// 					data.getValue()
// 					);
// 		} else {
// 			// set multiple data if key is not defined
// 			JsonNode values = data.getValue();
// 			Iterator<Entry<String, JsonNode>> iterator = values.fields();
// 			while (iterator.hasNext()) {
// 				Entry<String, JsonNode> entry = iterator.next();
// 				client.set(
// 						data.getCluster(),
// 						entry.getKey(),
// 						data.getExpire(),
// 						entry.getValue()
// 				);
// 			}
// 		}
// 		return true;
// 	}
// 	
// 	@TritonMethod("memcached.delete")
// 	public boolean delete(DeleteCache data) {
// 		String cluster = data.getCluster();
// 		for (String key : data.getKeys()) {
// 			client.delete(cluster, key);
// 		}
// 		return true;
// 	}
// }


import javax.inject.Inject;
import com.amebame.triton.server.TritonServerCleaner;
import com.amebame.triton.server.TritonServerContext;
import com.amebame.triton.service.memcached.method.TritonMemcachedMethods;
package com.amebame.triton.service.memcached;



public class TritonMemcachedSetup {
	
	@Inject private TritonServerCleaner cleaner;
	
	@Inject private TritonServerContext context;
	
	@Inject private TritonMemcachedClient client;
	
// Path: src/main/java/com/amebame/triton/server/TritonServerCleaner.java
// @Singleton
// public class TritonServerCleaner {
// 	
// 	private static final Logger log = LogManager.getLogger(TritonServerCleaner.class);
// 	
// 	private List<TritonCleaner> cleaners;
// 
// 	public TritonServerCleaner() {
// 		this.cleaners = new ArrayList<TritonCleaner>();
// 	}
// 
// 	public void add(TritonCleaner cleaner) {
// 		this.cleaners.add(cleaner);
// 	}
// 	
// 	public void add(final Runnable runnable) {
// 		this.cleaners.add(new TritonCleaner() {
// 			@Override
// 			public void clean() {
// 				runnable.run();
// 			}
// 		});
// 	}
// 	
// 	public void clean() {
// 		for (TritonCleaner cleaner : cleaners) {
// 			try {
// 				cleaner.clean();
// 			} catch (Exception e) {
// 				log.error("failed to cleanup", e);
// 			}
// 		}
// 	}
// }
// 
// Path: src/main/java/com/amebame/triton/server/TritonServerContext.java
// @Singleton
// public class TritonServerContext {
// 	
// 	private TritonServerMethodMap methodMap;
// 	
// 	@Inject
// 	public TritonServerContext(TritonServerConfiguration config) {
// 		methodMap = new TritonServerMethodMap();
// 	}
// 	
// 	/**
// 	 * Add server methods from the target object
// 	 * @param target
// 	 */
// 	public void addServerMethod(Object target) {
// 		methodMap.register(target);
// 	}
// 	
// 	/**
// 	 * Get server method by name
// 	 * @param name
// 	 * @return
// 	 */
// 	public TritonServerMethod getServerMethod(String name) {
// 		return methodMap.getMethod(name);
// 	}
// }
// 
// Path: src/main/java/com/amebame/triton/service/memcached/method/TritonMemcachedMethods.java
// public class TritonMemcachedMethods {
// 
// 	private TritonMemcachedClient client;
// 	
// 	@Inject
// 	public TritonMemcachedMethods(TritonMemcachedClient client) {
// 		this.client = client;
// 	}
// 
// 	@TritonMethod("memcached.get")
// 	public Object get(GetCache data) {
// 		String cluster = data.getCluster();
// 		if (data.getKey() != null) {
// 			// get by single key
// 			return client.get(cluster, data.getKey(), data.getExpire());
// 		} else {
// 			// get by multiple keys
// 			return client.getMulti(cluster, data.getKeys());
// 		}
// 	}
// 	
// 	@TritonMethod("memcached.set")
// 	public boolean set(SetCache data) {
// 		if (data.getKey() != null) {
// 			// set single key-value data
// 			client.set(
// 					data.getCluster(),
// 					data.getKey(),
// 					data.getExpire(),
// 					data.getValue()
// 					);
// 		} else {
// 			// set multiple data if key is not defined
// 			JsonNode values = data.getValue();
// 			Iterator<Entry<String, JsonNode>> iterator = values.fields();
// 			while (iterator.hasNext()) {
// 				Entry<String, JsonNode> entry = iterator.next();
// 				client.set(
// 						data.getCluster(),
// 						entry.getKey(),
// 						data.getExpire(),
// 						entry.getValue()
// 				);
// 			}
// 		}
// 		return true;
// 	}
// 	
// 	@TritonMethod("memcached.delete")
// 	public boolean delete(DeleteCache data) {
// 		String cluster = data.getCluster();
// 		for (String key : data.getKeys()) {
// 			client.delete(cluster, key);
// 		}
// 		return true;
// 	}
// }


// Path: src/main/java/com/amebame/triton/service/memcached/TritonMemcachedSetup.java
import javax.inject.Inject;
import com.amebame.triton.server.TritonServerCleaner;
import com.amebame.triton.server.TritonServerContext;
import com.amebame.triton.service.memcached.method.TritonMemcachedMethods;

package com.amebame.triton.service.memcached;



public class TritonMemcachedSetup {
	
	@Inject private TritonServerCleaner cleaner;
	
	@Inject private TritonServerContext context;
	
	@Inject private TritonMemcachedClient client;
	
	@Inject private TritonMemcachedMethods methods;