
com.caucho.v5.ramp.vault.FindQueryVault Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of baratine Show documentation
Show all versions of baratine Show documentation
A reactive Java web server.
/*
* Copyright (c) 1998-2015 Caucho Technology -- all rights reserved
*
* This file is part of Baratine(TM)
*
* Each copy or derived work must preserve the copyright notice and this
* notice unmodified.
*
* Baratine is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* Baratine is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty
* of NON-INFRINGEMENT. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with Baratine; if not, write to the
*
* Free Software Foundation, Inc.
* 59 Temple Place, Suite 330
* Boston, MA 02111-1307 USA
*
* @author Alex Rojkov
*/
package com.caucho.v5.ramp.vault;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import com.caucho.v5.amp.vault.MethodVault;
import com.caucho.v5.amp.vault.VaultDriver;
import io.baratine.db.Cursor;
import io.baratine.service.Result;
abstract class FindQueryVault implements MethodVault
{
private String _where;
private VaultDriver _driver;
protected FindQueryVault(VaultDriver driver, String where)
{
_driver = driver;
_where = where;
}
public String getWhere()
{
return _where;
}
public VaultDriver driver()
{
return _driver;
}
@Override
public String toString()
{
return FindQueryVault.class.getSimpleName() + '[' + _where + ']';
}
public static class KeyResult extends FindQueryVault
{
KeyResult(VaultDriver driver, String where)
{
super(driver, where);
}
@Override
public void invoke(Result result, Object[] args)
{
driver().findOne(getWhere(),
args,
result.of(x -> (V) x));
}
}
public static class ProxyResult extends FindQueryVault
{
private Class _api;
ProxyResult(VaultDriver driver,
String where,
Class api)
{
super(driver, where);
Objects.requireNonNull(api);
_api = api;
}
@Override
public void invoke(Result result, Object []args)
{
driver().findOne(getWhere(),
args,
result.of(key -> driver().lookup(key).as(_api)));
}
}
public static class DataResult extends FindQueryVault
{
private Class _api;
private FindDataVault _dataBean;
private String _sql;
DataResult(VaultDriverDataImpl driver,
String where,
Class api)
{
super(driver, where);
Objects.requireNonNull(api);
_api = api;
_dataBean = new FindDataVault<>(driver, api);
String select = _dataBean.select();
StringBuilder sb = new StringBuilder();
sb.append("SELECT ");
sb.append(select);
sb.append(" FROM ");
sb.append(driver.entityInfo().tableName());
if (where != null) {
sb.append(" ");
sb.append(where);
}
_sql = sb.toString();
}
@Override
public void invoke(Result result, Object []args)
{
/*
driver().findOne(_sql,
args,
result.of(key -> driver().lookup(key).as(_api)));
*/
driver().findOneCursor(_sql,
args,
result.of(c -> _dataBean.get(c)));
}
}
public static class ListKeyResult extends FindQueryVault
{
ListKeyResult(VaultDriver driver, String where)
{
super(driver, where);
}
@Override
public void invoke(Result result, Object[] args)
{
driver().findAllIds(getWhere(),
args,
result.of(x -> (V) x));
}
}
public static class ListDataResult extends FindQueryVault>
{
private Class _api;
private FindDataVault _dataBean;
private String _sql;
ListDataResult(VaultDriverDataImpl driver,
String where,
Class api)
{
super(driver, where);
Objects.requireNonNull(api);
_api = api;
_dataBean = new FindDataVault<>(driver, api);
String select = _dataBean.select();
StringBuilder sb = new StringBuilder();
sb.append("SELECT ");
sb.append(select);
sb.append(" FROM ");
sb.append(driver.entityInfo().tableName());
if (where != null) {
sb.append(" ");
sb.append(where);
}
_sql = sb.toString();
}
@Override
public void invoke(Result> result, Object []args)
{
/*
driver().findOne(_sql,
args,
result.of(key -> driver().lookup(key).as(_api)));
*/
driver().findCursor(_sql,
args,
result.of(iter -> listResult(iter)));
}
public List listResult(Iterable iter)
{
ArrayList list = new ArrayList<>();
for (Cursor cursor : iter) {
list.add(_dataBean.get(cursor));
}
return list;
}
}
public static class ListProxyResult extends FindQueryVault>
{
private Class _api;
ListProxyResult(VaultDriver driver,
String where,
Class api)
{
super(driver, where);
_api = api;
}
@Override
public void invoke(Result> result, Object []args)
{
driver().findAllIds(getWhere(),
args,
result.of(ids -> toProxies(ids)));
}
private List toProxies(Iterable ids)
{
List list = new ArrayList<>();
for (ID id : ids) {
list.add(driver().lookup(id).as(_api));
}
return list;
}
}
public static class ListResultField extends FindQueryVault
{
private FieldInfo _field;
private EntityInfo _entityDesc;
ListResultField(VaultDriver driver,
EntityInfo entityDesc,
FieldInfo field,
String where)
{
super(driver, where);
_entityDesc = entityDesc;
_field = field;
}
@Override
public void invoke(Result result, Object[] args)
{
VaultDriver driver = driver();
StringBuilder sql = _entityDesc.selectField(_field).append(' ');
if (getWhere() != null)
sql.append(getWhere());
driver.findValueList(sql.toString(), args, (Result>) result);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy