/*
* Copyright 2013, Arondor
*
* 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.
*/
package com.arondor.common.reflection.gwt.client.service;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import com.arondor.common.reflection.model.java.AccessibleClass;
import com.google.gwt.user.client.rpc.AsyncCallback;
public class CacheGWTReflectionServiceAsync implements GWTReflectionServiceAsync
{
private final GWTReflectionServiceAsync rpcService;
public CacheGWTReflectionServiceAsync(GWTReflectionServiceAsync rpcService)
{
this.rpcService = rpcService;
}
private final Map<String, AccessibleClass> accessibleClassMap = new HashMap<String, AccessibleClass>();
public void getAccessibleClass(final String className, final AsyncCallback<AccessibleClass> callback)
{
if (accessibleClassMap.containsKey(className))
{
callback.onSuccess(accessibleClassMap.get(className));
}
else
{
rpcService.getAccessibleClass(className, new AsyncCallback<AccessibleClass>()
{
public void onFailure(Throwable caught)
{
callback.onFailure(caught);
}
public void onSuccess(AccessibleClass result)
{
accessibleClassMap.put(className, result);
callback.onSuccess(result);
}
});
}
}
private final Map<String, Collection<AccessibleClass>> implementingAccessibleClassesMap = new HashMap<String, Collection<AccessibleClass>>();
public void getImplementingAccessibleClasses(final String name,
final AsyncCallback<Collection<AccessibleClass>> callback)
{
if (implementingAccessibleClassesMap.containsKey(name))
{
callback.onSuccess(implementingAccessibleClassesMap.get(name));
}
else
{
rpcService.getImplementingAccessibleClasses(name, new AsyncCallback<Collection<AccessibleClass>>()
{
public void onFailure(Throwable caught)
{
callback.onFailure(caught);
}
public void onSuccess(Collection<AccessibleClass> result)
{
implementingAccessibleClassesMap.put(name, result);
callback.onSuccess(result);
}
});
}
}
}