blob: e3132637de68e1db339f54dc23ac7a1ec066825e [file] [log] [blame]
/*
* Copyright 2010 Google Inc.
*
* 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.google.web.bindery.requestfactory.server;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
/**
* Domain object for SimpleFooRequest.
*/
public class SimpleBar implements HasId {
/**
* DO NOT USE THIS UGLY HACK DIRECTLY! Call {@link #get} instead.
*/
private static Map<String, SimpleBar> jreTestSingleton = new HashMap<String, SimpleBar>();
private static long nextId = 2L;
static {
try {
reset();
} catch (Throwable t) {
t.printStackTrace();
}
}
public static Long countSimpleBar() {
return (long) get().size();
}
public static List<SimpleBar> findAll() {
return new ArrayList<SimpleBar>(get().values());
}
public static Set<SimpleBar> findAsSet() {
return new HashSet<SimpleBar>(get().values());
}
public static SimpleBar findSimpleBar(String id) {
return findSimpleBarById(id);
}
/**
* Returns <code>null</code> if {@link #findFails} is <code>true</code>.
*/
public static SimpleBar findSimpleBarById(String id) {
SimpleBar toReturn = get().get(id);
return (toReturn == null || toReturn.findFails) ? null : toReturn;
}
@SuppressWarnings("unchecked")
public static synchronized Map<String, SimpleBar> get() {
HttpServletRequest req = RequestFactoryServlet.getThreadLocalRequest();
if (req == null) {
// May be in a JRE test case, use the the singleton
return jreTestSingleton;
} else {
/*
* This will not behave entirely correctly unless we have a servlet filter
* that doesn't allow any requests to be processed unless they're
* associated with an existing session.
*/
Map<String, SimpleBar> value = (Map<String, SimpleBar>) req.getSession().getAttribute(
SimpleBar.class.getCanonicalName());
if (value == null) {
value = resetImpl();
}
return value;
}
}
public static SimpleBar getSingleton() {
return findSimpleBar("1L");
}
public static void reset() {
resetImpl();
}
public static synchronized Map<String, SimpleBar> resetImpl() {
Map<String, SimpleBar> instance = new HashMap<String, SimpleBar>();
// fixtures
SimpleBar s1 = new SimpleBar();
s1.setId("1L");
s1.isNew = false;
instance.put(s1.getId(), s1);
SimpleBar s2 = new SimpleBar();
s2.setId("999L");
s2.isNew = false;
instance.put(s2.getId(), s2);
HttpServletRequest req = RequestFactoryServlet.getThreadLocalRequest();
if (req == null) {
jreTestSingleton = instance;
} else {
req.getSession().setAttribute(SimpleBar.class.getCanonicalName(),
instance);
}
return instance;
}
public static SimpleBar returnFirst(List<SimpleBar> list) {
SimpleBar toReturn = list.get(0);
return toReturn;
}
Integer version = 1;
private String id = "999L";
private boolean findFails;
private boolean isNew = true;
private boolean unpersisted;
private String userName;
public SimpleBar() {
version = 1;
userName = "FOO";
}
public void delete() {
get().remove(getId());
}
public Boolean getFindFails() {
return findFails;
}
public String getId() {
return unpersisted ? null : id;
}
public Boolean getUnpersisted() {
return unpersisted;
}
public String getUserName() {
return userName;
}
public Integer getVersion() {
return unpersisted ? null : version;
}
public void persist() {
if (isNew) {
setId(Long.toString(nextId++));
isNew = false;
get().put(getId(), this);
}
version++;
}
public SimpleBar persistAndReturnSelf() {
persist();
return this;
}
public void setFindFails(Boolean fails) {
this.findFails = fails;
}
public void setId(String id) {
this.id = id;
}
public void setUnpersisted(Boolean unpersisted) {
this.unpersisted = unpersisted;
}
public void setUserName(String userName) {
this.userName = userName;
}
public void setVersion(Integer version) {
this.version = version;
}
}