// Path: src/main/java/org/springframework/social/evernote/connect/EvernoteOAuthToken.java
// public class EvernoteOAuthToken extends OAuthToken {
// 
// 	public static final String KEY_OAUTH_TOKEN = "oauth_token";
// 	public static final String KEY_OAUTH_TOKEN_SECRET = "oauth_token_secret";
// 	public static final String EDAM_SHARD = "edam_shard";
// 	public static final String EDAM_USER_ID = "edam_userId";
// 	public static final String EDAM_EXPIRES = "edam_expires";
// 	public static final String EDAM_NOTE_STORE_URL = "edam_noteStoreUrl";
// 	public static final String EDAM_WEB_API_URL_PREFIX = "edam_webApiUrlPrefix";
// 
// 
// 	private String edamShard;
// 	private String edamUserId;
// 	private String edamExpires;
// 	private String edamNoteStoreUrl;
// 	private String edamWebApiUrlPrefix;
// 
// 	private EvernoteOAuthToken(String value, String secret) {
// 		super(value, secret);
// 	}
// 
// 	public String getEdamShard() {
// 		return edamShard;
// 	}
// 
// 	public String getEdamUserId() {
// 		return edamUserId;
// 	}
// 
// 	public String getEdamExpires() {
// 		return edamExpires;
// 	}
// 
// 	public String getEdamNoteStoreUrl() {
// 		return edamNoteStoreUrl;
// 	}
// 
// 	public String getEdamWebApiUrlPrefix() {
// 		return edamWebApiUrlPrefix;
// 	}
// 
// 	public static class EvernoteOAuthTokenBuilder {
// 		private String value;
// 		private String secret;
// 		private String edamShard;
// 		private String edamUserId;
// 		private String edamExpires;
// 		private String edamNoteStoreUrl;
// 		private String edamWebApiUrlPrefix;
// 
// 		public EvernoteOAuthToken build() {
// 			// TODO: assert null
// 
// 			EvernoteOAuthToken token = new EvernoteOAuthToken(this.value, this.secret);
// 			token.edamShard = this.edamShard;
// 			token.edamUserId = this.edamUserId;
// 			token.edamExpires = this.edamExpires;
// 			token.edamNoteStoreUrl = this.edamNoteStoreUrl;
// 			token.edamWebApiUrlPrefix = this.edamWebApiUrlPrefix;
// 			return token;
// 		}
// 
// 		public EvernoteOAuthTokenBuilder setToken(String value) {
// 			this.value = value;
// 			return this;
// 		}
// 
// 		public EvernoteOAuthTokenBuilder setSecret(String secret) {
// 			this.secret = secret;
// 			return this;
// 		}
// 
// 		public EvernoteOAuthTokenBuilder setEdamShard(String edamShard) {
// 			this.edamShard = edamShard;
// 			return this;
// 		}
// 
// 		public EvernoteOAuthTokenBuilder setEdamUserId(String edamUserId) {
// 			this.edamUserId = edamUserId;
// 			return this;
// 		}
// 
// 		public EvernoteOAuthTokenBuilder setEdamExpires(String edamExpires) {
// 			this.edamExpires = edamExpires;
// 			return this;
// 		}
// 
// 		public EvernoteOAuthTokenBuilder setEdamNoteStoreUrl(String edamNoteStoreUrl) {
// 			this.edamNoteStoreUrl = edamNoteStoreUrl;
// 			return this;
// 		}
// 
// 		public EvernoteOAuthTokenBuilder setEdamWebApiUrlPrefix(String edamWebApiUrlPrefix) {
// 			this.edamWebApiUrlPrefix = edamWebApiUrlPrefix;
// 			return this;
// 		}
// 	}
// }
// 
// Path: src/main/java/org/springframework/social/evernote/api/EvernoteExceptionUtils.java
// public static interface Operation<T> {
// 	T execute() throws Exception;
// }


import com.evernote.auth.EvernoteAuth;
import com.evernote.auth.EvernoteService;
import com.evernote.clients.*;
import com.evernote.edam.type.LinkedNotebook;
import org.springframework.aop.framework.ProxyFactory;
import org.springframework.social.evernote.api.*;
import org.springframework.social.evernote.connect.EvernoteOAuthToken;
import static org.springframework.social.evernote.api.EvernoteExceptionUtils.Operation;
	}


	@Override
	public BusinessNoteStoreOperations businessNoteStoreOperations() {
		BusinessNoteStoreClient businessNoteStoreClient = businessNoteStoreClient();
		return createOperationsProxy(BusinessNoteStoreOperations.class, businessNoteStoreClient);
	}

	@Override
	public LinkedNoteStoreOperations linkedNoteStoreOperations(LinkedNotebook linkedNotebook) {
		LinkedNoteStoreClient linkedNoteStoreClient = linkedNoteStoreClient(linkedNotebook);
		return createOperationsProxy(LinkedNoteStoreOperations.class, linkedNoteStoreClient);
	}

	@Override
	public NoteStoreOperations noteStoreOperations() {
		NoteStoreClient noteStoreClient = noteStoreClient();
		return createOperationsProxy(NoteStoreOperations.class, noteStoreClient);
	}

	@Override
	public UserStoreOperations userStoreOperations() throws EvernoteException {
		UserStoreClient userStoreClient = userStoreClient();
		return createOperationsProxy(UserStoreOperations.class, userStoreClient);
	}

	private <T> T createOperationsProxy(Class<T> operationClass, Object storeClient) {
		ProxyFactory proxyFactory = new ProxyFactory(storeClient);
		proxyFactory.addInterface(operationClass);
// Path: src/main/java/org/springframework/social/evernote/connect/EvernoteOAuthToken.java
// public class EvernoteOAuthToken extends OAuthToken {
// 
// 	public static final String KEY_OAUTH_TOKEN = "oauth_token";
// 	public static final String KEY_OAUTH_TOKEN_SECRET = "oauth_token_secret";
// 	public static final String EDAM_SHARD = "edam_shard";
// 	public static final String EDAM_USER_ID = "edam_userId";
// 	public static final String EDAM_EXPIRES = "edam_expires";
// 	public static final String EDAM_NOTE_STORE_URL = "edam_noteStoreUrl";
// 	public static final String EDAM_WEB_API_URL_PREFIX = "edam_webApiUrlPrefix";
// 
// 
// 	private String edamShard;
// 	private String edamUserId;
// 	private String edamExpires;
// 	private String edamNoteStoreUrl;
// 	private String edamWebApiUrlPrefix;
// 
// 	private EvernoteOAuthToken(String value, String secret) {
// 		super(value, secret);
// 	}
// 
// 	public String getEdamShard() {
// 		return edamShard;
// 	}
// 
// 	public String getEdamUserId() {
// 		return edamUserId;
// 	}
// 
// 	public String getEdamExpires() {
// 		return edamExpires;
// 	}
// 
// 	public String getEdamNoteStoreUrl() {
// 		return edamNoteStoreUrl;
// 	}
// 
// 	public String getEdamWebApiUrlPrefix() {
// 		return edamWebApiUrlPrefix;
// 	}
// 
// 	public static class EvernoteOAuthTokenBuilder {
// 		private String value;
// 		private String secret;
// 		private String edamShard;
// 		private String edamUserId;
// 		private String edamExpires;
// 		private String edamNoteStoreUrl;
// 		private String edamWebApiUrlPrefix;
// 
// 		public EvernoteOAuthToken build() {
// 			// TODO: assert null
// 
// 			EvernoteOAuthToken token = new EvernoteOAuthToken(this.value, this.secret);
// 			token.edamShard = this.edamShard;
// 			token.edamUserId = this.edamUserId;
// 			token.edamExpires = this.edamExpires;
// 			token.edamNoteStoreUrl = this.edamNoteStoreUrl;
// 			token.edamWebApiUrlPrefix = this.edamWebApiUrlPrefix;
// 			return token;
// 		}
// 
// 		public EvernoteOAuthTokenBuilder setToken(String value) {
// 			this.value = value;
// 			return this;
// 		}
// 
// 		public EvernoteOAuthTokenBuilder setSecret(String secret) {
// 			this.secret = secret;
// 			return this;
// 		}
// 
// 		public EvernoteOAuthTokenBuilder setEdamShard(String edamShard) {
// 			this.edamShard = edamShard;
// 			return this;
// 		}
// 
// 		public EvernoteOAuthTokenBuilder setEdamUserId(String edamUserId) {
// 			this.edamUserId = edamUserId;
// 			return this;
// 		}
// 
// 		public EvernoteOAuthTokenBuilder setEdamExpires(String edamExpires) {
// 			this.edamExpires = edamExpires;
// 			return this;
// 		}
// 
// 		public EvernoteOAuthTokenBuilder setEdamNoteStoreUrl(String edamNoteStoreUrl) {
// 			this.edamNoteStoreUrl = edamNoteStoreUrl;
// 			return this;
// 		}
// 
// 		public EvernoteOAuthTokenBuilder setEdamWebApiUrlPrefix(String edamWebApiUrlPrefix) {
// 			this.edamWebApiUrlPrefix = edamWebApiUrlPrefix;
// 			return this;
// 		}
// 	}
// }
// 
// Path: src/main/java/org/springframework/social/evernote/api/EvernoteExceptionUtils.java
// public static interface Operation<T> {
// 	T execute() throws Exception;
// }


// Path: src/main/java/org/springframework/social/evernote/api/impl/EvernoteTemplate.java
import com.evernote.auth.EvernoteAuth;
import com.evernote.auth.EvernoteService;
import com.evernote.clients.*;
import com.evernote.edam.type.LinkedNotebook;
import org.springframework.aop.framework.ProxyFactory;
import org.springframework.social.evernote.api.*;
import org.springframework.social.evernote.connect.EvernoteOAuthToken;
import static org.springframework.social.evernote.api.EvernoteExceptionUtils.Operation;

	}


	@Override
	public BusinessNoteStoreOperations businessNoteStoreOperations() {
		BusinessNoteStoreClient businessNoteStoreClient = businessNoteStoreClient();
		return createOperationsProxy(BusinessNoteStoreOperations.class, businessNoteStoreClient);
	}

	@Override
	public LinkedNoteStoreOperations linkedNoteStoreOperations(LinkedNotebook linkedNotebook) {
		LinkedNoteStoreClient linkedNoteStoreClient = linkedNoteStoreClient(linkedNotebook);
		return createOperationsProxy(LinkedNoteStoreOperations.class, linkedNoteStoreClient);
	}

	@Override
	public NoteStoreOperations noteStoreOperations() {
		NoteStoreClient noteStoreClient = noteStoreClient();
		return createOperationsProxy(NoteStoreOperations.class, noteStoreClient);
	}

	@Override
	public UserStoreOperations userStoreOperations() throws EvernoteException {
		UserStoreClient userStoreClient = userStoreClient();
		return createOperationsProxy(UserStoreOperations.class, userStoreClient);
	}

	private <T> T createOperationsProxy(Class<T> operationClass, Object storeClient) {
		ProxyFactory proxyFactory = new ProxyFactory(storeClient);
		proxyFactory.addInterface(operationClass);
		proxyFactory.addInterface(StoreClientHolder.class);