package net.simpleframework.content.component;
import java.util.ArrayList;
import java.util.Map;
import net.simpleframework.ado.IDataObjectQuery;
import net.simpleframework.ado.IDataObjectValue;
import net.simpleframework.ado.bean.IDataObjectBean;
import net.simpleframework.ado.bean.IIdBeanAware;
import net.simpleframework.ado.db.IQueryEntitySet;
import net.simpleframework.ado.db.ITableEntityManager;
import net.simpleframework.ado.db.QueryDialect;
import net.simpleframework.ado.db.schema.ExpressionValue;
import net.simpleframework.util.ConvertUtils;
import net.simpleframework.util.StringUtils;
import net.simpleframework.web.page.component.AbstractEntityBeanHandle;
import net.simpleframework.web.page.component.ComponentParameter;
/**
* LGPLv3
*
* @author (cknet@126.com, 13910090885)
* http://code.google.com/p/simpleframework/
* http://www.simpleframework.net
*/
public abstract class AbstractContentHandle extends AbstractEntityBeanHandle implements
IContentHandle {
@Override
public Object getDocumentId(final ComponentParameter compParameter) throws Exception {
try {
return ConvertUtils.toLong(StringUtils.text(
compParameter.getRequestParameter(getDocumentIdParameterName(compParameter)),
(String) compParameter.getBeanProperty("documentId")));
} catch (final Exception e) {
return null;
}
}
public String getDocumentIdParameterName(final ComponentParameter compParameter)
throws Exception {
return ContentComponentUtils.DOCUMENT_ID;
}
protected <T extends IIdBeanAware> IDataObjectQuery<T> beans(
final ComponentParameter compParameter, final Object parentId, final String orderBySQL)
throws Exception {
@SuppressWarnings("unchecked")
final Class<T> t = (Class<T>) getEntityBeanClass();
final ExpressionValue ev = getBeansSQL(compParameter, parentId);
final IQueryEntitySet<T> set;
if (StringUtils.hasText(orderBySQL)) {
set = getDataObjectManager(compParameter, t).query(
new ExpressionValue(ev.getExpression() + " " + orderBySQL, ev.getValues()), t);
} else {
set = getDataObjectManager(compParameter, t).query(ev, t);
}
set.setQueryDialect(new QueryDialect() {
@Override
public IDataObjectValue getCountSQL() {
return ev;
}
});
return set;
}
protected ExpressionValue getBeansSQL(final ComponentParameter compParameter,
final Object parentId) throws Exception {
final ArrayList<Object> al = new ArrayList<Object>();
final StringBuilder sql = new StringBuilder();
final Object documentId = getDocumentId(compParameter);
if (documentId == null) {
sql.append(getSQLNullExpr(compParameter, "documentid"));
} else {
sql.append("documentid=?");
al.add(documentId);
}
sql.append(" and ");
if (parentId == null) {
sql.append(getSQLNullExpr(compParameter, "parentid"));
} else {
sql.append("parentid=?");
al.add(parentId);
}
return new ExpressionValue(sql.toString(), al.toArray());
}
@Override
protected <T extends IDataObjectBean> void doBeforeEdit(final ComponentParameter compParameter,
final ITableEntityManager temgr, final T t, final Map<String, Object> data,
final Class<T> beanClazz) throws Exception {
if (t instanceof AbstractContentBase) {
ContentComponentUtils.updateLastUpdate(compParameter.request, (AbstractContentBase) t);
}
}
@Override
public String getIdParameterName(final ComponentParameter compParameter) {
return null;
}
}
|